class Net::IMAP::SASL::OAuthAuthenticator

SASL 机制的抽象基类,定义在 RFC7628

属性

authzid[R]

授权身份:代表或作为另一个身份。 身份形式是特定于应用程序协议的。 如果未提供或留空,服务器会从身份验证身份中派生授权身份。 服务器负责验证客户端的凭据,并验证其与客户端身份验证身份关联的身份是否允许代表(或作为)授权身份。

例如,管理员或超级用户可以承担另一个角色

imap.authenticate "PLAIN", "root", passwd, authzid: "user"
host[R]

客户端连接的主机名。(可选)

last_server_response[R]

存储最近的服务器“挑战”。 当身份验证失败时,这里可能包含有关失败原因的信息,以 JSON 格式。

mthd[R]

HTTP 方法。(可选)

path[R]

HTTP 路径数据。(可选)

port[R]

客户端连接的服务端口。(可选)

post[R]

HTTP post 数据。(可选)

qs[R]

查询字符串。(可选)

query[R]

查询字符串。(可选)

username[R]

授权身份:代表或作为另一个身份。 身份形式是特定于应用程序协议的。 如果未提供或留空,服务器会从身份验证身份中派生授权身份。 服务器负责验证客户端的凭据,并验证其与客户端身份验证身份关联的身份是否允许代表(或作为)授权身份。

例如,管理员或超级用户可以承担另一个角色

imap.authenticate "PLAIN", "root", passwd, authzid: "user"

公共类方法

new(authzid: nil, host: nil, port: nil, username: nil, query: nil, mthd: nil, path: nil, post: nil, qs: nil, **) 点击以切换源代码

创建一个 RFC7628 OAuth 验证器。

参数

请参阅子类以获取必需的参数。 以下参数均为可选,但值得注意的是,**应用程序协议被允许要求** authzid (或其他参数,例如 hostport) **以及特定的服务器实现**。

  • 可选 authzid — 代表或作为另一个身份的授权身份。

    可选 usernameauthzid 的别名。

    请注意,与某些其他验证器不同,username 设置的是授权身份而不是身份验证身份。 身份验证身份由 OAuth 令牌为客户端建立。

  • 可选 host — 客户端连接的主机名。

  • 可选 port — 客户端连接的服务端口。

  • 可选 mthd — HTTP 方法

  • 可选 path — HTTP 路径数据

  • 可选 post — HTTP post 数据

  • 可选 qs — HTTP 查询字符串

    可选 queryqs 的别名

任何其他关键字参数都会被忽略。

# File net-imap-0.5.4/lib/net/imap/sasl/oauthbearer_authenticator.rb, line 84
def initialize(authzid: nil, host: nil, port: nil,
               username: nil, query: nil,
               mthd: nil, path: nil, post: nil, qs: nil, **)
  @authzid = authzid || username
  @host    = host
  @port    = port
  @mthd    = mthd
  @path    = path
  @post    = post
  @qs      = qs || query
  @done    = false
end

公共实例方法

authorization() 点击以切换源代码

HTTP Authorization 标头的值

由子类实现。

# File net-imap-0.5.4/lib/net/imap/sasl/oauthbearer_authenticator.rb, line 124
def authorization; raise "must be implemented by subclass" end
done?() 点击以切换源代码

当初始客户端响应已发送时返回 true。

除非此方法返回 true,否则身份验证不应成功,但这 **不** 表示成功。

# File net-imap-0.5.4/lib/net/imap/sasl/oauthbearer_authenticator.rb, line 119
def done?; @done end
initial_client_response() 点击以切换源代码

RFC7628 §3.1 格式化的响应。

# File net-imap-0.5.4/lib/net/imap/sasl/oauthbearer_authenticator.rb, line 99
def initial_client_response
  kv_pairs = {
    host: host, port: port, mthd: mthd, path: path, post: post, qs: qs,
    auth: authorization, # authorization is implemented by subclasses
  }.compact
  [gs2_header, *kv_pairs.map {|kv| kv.join("=") }, "\1"].join("\1")
end
process(data) 点击以切换源代码

第一次返回 initial_client_response,然后返回 “^A”。

# File net-imap-0.5.4/lib/net/imap/sasl/oauthbearer_authenticator.rb, line 108
def process(data)
  @last_server_response = data
  done? ? "\1" : initial_client_response
ensure
  @done = true
end