IMAP的Gmail身份验证失败,但POP3失败

时间:2020-08-13 23:23:49

标签: oauth-2.0 gmail-imap gmail-pop

我已经完成了在我的Google帐户(不使用GSuite)上为测试应用程序创建OAuth2访问令牌的过程,并且每当我尝试使用它与imap.google.com一起使用XOAUTH2进行身份验证时,都会失败,并且返回{“ status”:“ 400”,“ schemes”:“ Bearer”,“ scope”:“ https://mail.google.com/”},然后返回IMAP状态响应否[AUTHENTICATIONFAILED]无效的凭据(失败)

我还看到了其他一些类似的问题,事实证明,问题是因为它们在请求令牌时没有使用范围https://mail.google.com/。但是,我确实使用了该范围,并且令牌进行了验证。使用https://www.googleapis.com/oauth2/v1/tokeninfo返回:

{
  "issued_to": "xxxxx.apps.googleusercontent.com",
  "audience": "xxxxx.apps.googleusercontent.com",
  "scope": "https://mail.google.com/",
  "expires_in": 2083,
  "access_type": "offline"
}

问题是,使用Google的POP3服务器并连接到pop.gmail.com进行身份验证时,相同的令牌就可以正常工作。这似乎是IMAP特有的问题,我检查了一下,我正在测试的Gmail帐户是否同时启用了POP3和IMAP访问。

此外,执行XOAUTH2身份验证的同一IMAP代码对Outlook及其访问令牌也可以正常工作。因此,当我使用最广泛的范围时,为什么Google拒绝有效的令牌我感到茫然。

任何建议或见解都将受到欢迎。

1 个答案:

答案 0 :(得分:1)

进行更多测试后,我能够使它工作。该解决方案对于不滚动自己的OAuth2代码的任何人都不会有帮助,但这就是问题所在。我正在这样编码AUTHENTICATE请求(其中^ A是SOH控制字符):

^Auser=username@gmail.com^Aauth=bearer ya29.a0AfH6SMA8fcO_RkV3sH73f.....^A^A

Google的POP3服务器完全可以解决此问题,Outlook的邮件服务器也可以。但是,Google的IMAP服务器显然存在一个真正的问题,即“ bearer”没有大写。在审核RFC 7628之后,尽管在标准中对此进行了明确规定:

实施者注意:SASL OAuth方法名称不区分大小写。一个示例使用“ Bearer”,但可以很容易地使用“ bearer”,“ BEARER”或“ BeArEr”。

更改使用“ auth = Bearer”而不是“ auth = bearer”的请求将允许客户端进行身份验证。显然,这是Google的问题,但至少已经解决了。