class Net::IMAP::SASL::XOAuth2Authenticator
“XOAUTH2
” SASL 机制的验证器。此机制最初为 GMail 创建,并被托管电子邮件提供商广泛采用。XOAUTH2
已由 Google 和 Microsoft 记录在案。
此机制需要一个 OAuth2 访问令牌,该令牌已通过适当的 OAuth2 范围授权以访问用户的服务。大多数这些范围不是标准化的 - 请查阅每个服务提供商的文档以获取其范围。
尽管此机制从未标准化,并且已被 “OAUTHBEARER
” 取代,但它仍然得到广泛的支持。
属性
从 Google 的原始 XOAUTH2 文档中,尚不清楚 “User” 是指身份验证身份 (authcid
) 还是授权身份 (authzid
)。身份验证身份由 OAuth 令牌为客户端建立,因此 username
似乎必须是授权身份。
Microsoft 关于共享邮箱的文档明确指出 Office 365 服务器将其解释为授权身份。
尽管它们应该验证令牌是否已授权访问 username
的服务,但某些服务器似乎忽略了此字段,仅依赖于令牌授权的身份和范围。
已授权使用适当的 OAuth2 范围为 username
使用该服务的 OAuth2 访问令牌。
已授权使用适当的 OAuth2 范围为 username
使用该服务的 OAuth2 访问令牌。
从 Google 的原始 XOAUTH2 文档中,尚不清楚 “User” 是指身份验证身份 (authcid
) 还是授权身份 (authzid
)。身份验证身份由 OAuth 令牌为客户端建立,因此 username
似乎必须是授权身份。
Microsoft 关于共享邮箱的文档明确指出 Office 365 服务器将其解释为授权身份。
尽管它们应该验证令牌是否已授权访问 username
的服务,但某些服务器似乎忽略了此字段,仅依赖于令牌授权的身份和范围。
公共类方法
为 “XOAUTH2
” SASL 机制创建一个验证器,如 Google、Microsoft 和 Yahoo 所指定。
属性¶ ↑
-
username
— 被访问帐户的用户名。请注意,与某些其他验证器不同,
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
公共实例方法
当初始客户端响应已发送时返回 true。
除非此方法返回 true,否则身份验证不应成功,但这并不表示成功。
# File net-imap-0.5.4/lib/net/imap/sasl/xoauth2_authenticator.rb, line 98 def done?; @done end
XOAUTH2
可以发送初始客户端响应。
# File net-imap-0.5.4/lib/net/imap/sasl/xoauth2_authenticator.rb, line 84 def initial_response?; true end
返回 XOAUTH2 格式的响应,该响应将 username
与 oauth2_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
私有实例方法
# 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