【发布时间】:2013-06-01 12:06:36
【问题描述】:
我正在尝试使用 Ruby 中的 XOAUTH2 通过 IMAP 访问我的 Gmail 电子邮件。
通过使用 OAuth 2.0 和 oauth2 gem 进行身份验证,我已成功生成访问令牌(和刷新令牌)。我将使用gmail_xoauth 通过 IMAP 访问 Gmail。所以我现在需要根据the Gmail XOAuth2 docs 生成 SASL 初始客户端响应:
The SASL XOAUTH2 initial client response has the following format:
base64("user=" {User} "^Aauth=Bearer " {Access Token} "^A^A")
using the base64 encoding mechanism defined in RFC 4648.
^A represents a Control+A (\001).
我不清楚我如何在我的字符串中表示“Control+A”。我只是使用^A吗?
key = Base64.encode64("user=#{email}^Aauth=Bearer #{access_token_obj.token}^A^A")
This python script 使用\1 代替^A。我也试过\001。无论我尝试什么,在验证(在 irb 中)时,我得到的结果是:
>> imap = Net::IMAP.new('imap.gmail.com', 993, usessl=true, certs=nil, verify=false)
>> imap.authenticate('XOAUTH2', email, key)
OpenSSL::SSL::SSLError: SSL_write:: bad write retry
该错误可能完全不相关,但我不确定我尝试过的任何选项都是正确的。
【问题讨论】:
-
看来您完全无法连接到服务器。
-
啊,谢谢。虽然今天我收到了这个错误:
Net::IMAP::NoResponseError: Invalid credentials (Failure)。我想这就是进步……
标签: ruby oauth gmail imap sasl