类:Mongo::Auth::ScramConversationBase Private

继承:
SaslConversationBase 显示全部
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb

Overview

此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。

定义客户端和服务器之间身份验证对话的常见行为。

由于:

  • 2.0.0

常量摘要折叠

MIN_ITER_COUNT =

此常量是私有 API 的一部分。 应尽可能避免使用此常量,因为它将来可能会被删除或更改。

SCRAM-SHA- 1和 SCRAM-SHA- 256的最小迭代计数。

由于:

  • 2.0.0

4096

SaslConversationBase继承的常量

Mongo::Auth::SaslConversationBase::CLIENT_CONTINUE_MESSAGEMongo::Auth::SaslConversationBase::CLIENT_FIRST_MESSAGE

实例属性摘要折叠

ConversationBase继承的属性

#connection , #user

实例方法摘要折叠

SaslConversationBase继承的方法

#start

ConversationBase继承的方法

#build_message , #validate_external_auth_source

构造函数详情

#initialize (user, connection, client_nonce: nil) ⇒ ScramConversationBase

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

创建新对话。

参数:

  • user ( Auth::User )

    要交谈的用户。

  • client_nonce ( string | nil ) (默认为: nil

    要使用的客户端随机数。 如果此会话是为执行推测性身份验证的连接创建的,则此客户端随机数必须等于用于推测性身份验证的客户端随机数;否则,不得指定客户端随机数。

由于:

  • 2.0.0



38
39
40
41
# File 'build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb', 第38行

def 初始化(user, 连接, client_nonce: nil)
  
  @client_nonce = client_nonce || SecureRandom.基64
end

实例属性详细信息

# client_noncestring (只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 client_nonce 客户端随机数。

返回:

  • ( string )

    client_nonce 客户端随机数。

由于:

  • 2.0.0



44
45
46
# File 'build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb', 第44行

def client_nonce
  @client_nonce
end

# ID =" Integer " (只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

获取对话的 ID。

例子:

获取对话的 ID。

conversation.id

返回:

  • ( Integer )

    会话 ID。

由于:

  • 2.0.0



52
53
54
# File 'build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb', 第52行

def id
  @id
end

实例方法详细信息

#continue(reply_document, connection) ⇒ Protocol::Message

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

继续 SCRAM 对话。 在设置先前服务器通信的回复后,这会将客户端最终消息发送到服务器。

参数:

  • reply_document ( BSON::Document )

    上一条消息的回复文档。

  • 连接 ( Server::Connection )

    正在对连接进行身份验证。

返回:

由于:

  • 2.0.0



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb', 第73行

def 继续(reply_document, 连接)
  @id = reply_document[' sessionId ']
  payload_data = reply_document[' payload '].数据
  parsed_data = parse_payload(payload_data)
  @server_nonce = parsed_data.获取('r')
  @salt = Base64.strict_decode 64(parsed_data.获取(' s '))
  @iterations = parsed_data.获取(' i ').to_i.点击 do |i|
    if i < MIN_ITER_COUNT
      提高 错误::InsufficientIterationCount.new(
        错误::InsufficientIterationCount.message(MIN_ITER_COUNT, i))
    end
  end
  @auth_message = " #{ first_bare } , #{ payload_data } , #{ without_proof } "

  validate_server_nonce!

  选择器 = CLIENT_CONTINUE_MESSAGE.合并(merge)(
    有效负载: client_final_message,
    sessionId: id,
  )
  build_message(连接, user.auth_source, 选择器)
end

#finalize(connection) ⇒ Protocol::Message

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

完成SCRAM对话。 这将被迭代,直到提供的回复表明对话已完成。

参数:

返回:

由于:

  • 2.0.0



111
112
113
114
115
116
117
# File 'build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb', 第111行

def finalize(连接)
  选择器 = CLIENT_CONTINUE_MESSAGE.合并(merge)(
    有效负载: client_empty_message,
    sessionId: id,
  )
  build_message(连接, user.auth_source, 选择器)
end

# process_Continue_response (reply_document) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

处理来自服务器的第二个响应。

参数:

  • reply_document ( BSON::Document )

    继续响应的回复文档。

由于:

  • 2.0.0



100
101
102
103
# File 'build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb', 第100行

def process_Continue_response(reply_document)
  payload_data = parse_payload(reply_document[' payload '].数据)
  check_server_signature(payload_data)
end

# server_verified?true | fase

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

客户端是否验证了来自服务器的 ServerSignature。

返回:

  • ( true | fase )

    服务器的签名是否已验证。

另请参阅:

由于:

  • 2.0.0



59
60
61
# File 'build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb', 第59行

def server_verified?
  !!@server_verified
end

# speculative_auth_document哈希 | nil

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回要在握手中作为 speculativeAuthenticate 键的值提供给服务器的哈希值。

如果身份验证机制不支持推测性身份验证,则此方法返回 nil。

返回:

  • ( Hash | nil )

    推测性身份验证文档。

由于:

  • 2.0.0



126
127
128
# File 'build/Ruby-driver-v 2.19 /lib/mongo/auth/scram_conversation_base.rb', 第126行

def speculative_auth_document
  client_first_document.合并(merge)(数据库: user.auth_source)
end