class Net::IMAP::SASL::XOAuth2Authenticator

XOAUTH2” SASL 机制的验证器。此机制最初为 GMail 创建,并被托管电子邮件提供商广泛采用。XOAUTH2 已由 GoogleMicrosoft 记录在案。

此机制需要一个 OAuth2 访问令牌,该令牌已通过适当的 OAuth2 范围授权以访问用户的服务。大多数这些范围不是标准化的 - 请查阅每个服务提供商的文档以获取其范围。

尽管此机制从未标准化,并且已被 “OAUTHBEARER” 取代,但它仍然得到广泛的支持。

请参阅 Net::IMAP::SASL::OAuthBearerAuthenticator

属性

authzid[R]

Google 的原始 XOAUTH2 文档中,尚不清楚 “User” 是指身份验证身份 (authcid) 还是授权身份 (authzid)。身份验证身份由 OAuth 令牌为客户端建立,因此 username 似乎必须是授权身份。

Microsoft 关于共享邮箱的文档明确指出 Office 365 服务器将其解释为授权身份。

尽管它们应该验证令牌是否已授权访问 username 的服务,但某些服务器似乎忽略了此字段,仅依赖于令牌授权的身份和范围。

oauth2_token[R]

已授权使用适当的 OAuth2 范围为 username 使用该服务的 OAuth2 访问令牌。

secret[R]

已授权使用适当的 OAuth2 范围为 username 使用该服务的 OAuth2 访问令牌。

username[R]

Google 的原始 XOAUTH2 文档中,尚不清楚 “User” 是指身份验证身份 (authcid) 还是授权身份 (authzid)。身份验证身份由 OAuth 令牌为客户端建立,因此 username 似乎必须是授权身份。

Microsoft 关于共享邮箱的文档明确指出 Office 365 服务器将其解释为授权身份。

尽管它们应该验证令牌是否已授权访问 username 的服务,但某些服务器似乎忽略了此字段,仅依赖于令牌授权的身份和范围。

公共类方法

new(username, oauth2_token, **) → authenticator 点击切换源
new(username:, oauth2_token:, **) → authenticator
new(authzid:, oauth2_token:, **) → authenticator

为 “XOAUTH2” SASL 机制创建一个验证器,如 GoogleMicrosoftYahoo 所指定。

属性

  • username — 被访问帐户的用户名。

    authzidusername 的别名。

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

  • oauth2_token — 一个 OAuth2.0 访问令牌,已授权为 username 访问该服务。

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

# File net-imap-0.5.4/lib/net/imap/sasl/xoauth2_authenticator.rb, line 71
def initialize(user = nil, token = nil, username: nil, oauth2_token: nil,
               authzid: nil, secret: nil, **)
  @username = authzid || username || user or
    raise ArgumentError, "missing username (authzid)"
  @oauth2_token = oauth2_token || secret || token or
    raise ArgumentError, "missing oauth2_token"
  @done = false
end

公共实例方法

done?() 点击切换源

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

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

# File net-imap-0.5.4/lib/net/imap/sasl/xoauth2_authenticator.rb, line 98
def done?; @done end
initial_response? → true 点击切换源

XOAUTH2 可以发送初始客户端响应。

# File net-imap-0.5.4/lib/net/imap/sasl/xoauth2_authenticator.rb, line 84
def initial_response?; true end
process(_data) 点击切换源

返回 XOAUTH2 格式的响应,该响应将 usernameoauth2_token 组合在一起。

# File net-imap-0.5.4/lib/net/imap/sasl/xoauth2_authenticator.rb, line 88
def process(_data)
  build_oauth2_string(@username, @oauth2_token)
ensure
  @done = true
end

私有实例方法

build_oauth2_string(username, oauth2_token) 点击切换源
# File net-imap-0.5.4/lib/net/imap/sasl/xoauth2_authenticator.rb, line 102
def build_oauth2_string(username, oauth2_token)
  format("user=%s\1auth=Bearer %s\1\1", username, oauth2_token)
end