Gmail 的 XOAuth2 错误凭据无效
Posted
技术标签:
【中文标题】Gmail 的 XOAuth2 错误凭据无效【英文标题】:XOAuth2 for Gmail error Invalid Credential 【发布时间】:2014-08-02 17:38:04 【问题描述】:我正在使用 passport.js 作为身份验证服务从 google 获取 oauth2 访问令牌(https://github.com/jaredhanson/passport-google-oauth#usage-of-oauth-20),我可以获取范围为:https://mail.google.com/、https://www.googleapis.com/auth/userinfo.email 的访问令牌。 但是,当我尝试连接到 imap(使用 https://github.com/mscdex/node-imap)时,我收到错误消息:“无效凭据”。
这是我正在使用的 sn-p 代码:
var authData = [
"user=" + ('test@gmail.com' || ""),
"auth=Bearer " + 'ya29.LgBFSGtnPtfHLxkAAADjgeEFpUC9nD31kP5BqLKuH1MO3e_TRSdRTjEVKqQ-GQ',
"",
""];
var xoauth2_token = new Buffer(authData.join("\x01"), "utf-8").toString("base64");
var imap = new Imap(
user: ‘test@gmail.com',
xoauth2: xoauth2_token,
host: 'imap.gmail.com',
port: 993,
tls: true,
debug: console.log
);
imap.on('ready', function()
imap.openBox('INBOX', true, function()
var f = imap.seq.fetch(1);
f.on('message', function(m)
m.once('attributes', function(attrs)
console.log(attrs);
);
);
f.on('end', function()
imap.end();
);
);
);
imap.connect();
请求头和响应头:
[connection] Connected to host
<= '* OK Gimap ready for requests from 212.143.212.222 ce43mb7026158web'
=> 'A0 CAPABILITY'
<= '* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN'
<= 'A0 OK Thats all she wrote! ce43mb7026158web'
=> 'A1 AUTHENTICATE XOAUTH2 dXNlcj11YXBwZmFjdG9yeUBnbWFpbC5jb20BYXV0aD1CZWFyZXIgeWEyOS5MZ0JGU0d0blB0ZkhMeGtBQUFEamdlRUZwVUM5bkQzMWtQNUJxTEt1SDFNTzNlX0dMU2RSVGpFVktxUS1HUQEB'
<= '+ eyJzdGF0dXMiOiI0MDAiLCJzY2hlbWVzIjoiQmVhcmVyIiwic2NvcGUiOiJodHRwczovL21haWwuZ29vZ2xlLmNvbS8ifQ=='
=> '\r\n'
<= 'A1 NO [ALERT] Invalid credentials (Failure)'
我尝试指定空密码,没有,无论是否有用户,注释似乎都有效。
我也跟着谷歌网站上的例子:https://developers.google.com/gmail/xoauth2_libraries
在我的 google 帐户中,我可以看到我用于连接到 google 并获取令牌的应用程序,具有管理和查看电子邮件的授权,以及有关用户个人资料的基本详细信息。
我做错了什么?
【问题讨论】:
【参考方案1】:我遇到了同样的问题。它与 OAuth 2.0 Scopes 有关。
首先,我是在请求访问权限:
https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email使用这些范围我得到了那个错误。
“A1 NO [ALERT] 无效凭据(失败)”
最后我在Using OAuth 2.0找到了
IMAP 和 SMTP 访问范围是 https://mail.google.com/。
我请求了具有该范围的权限,并且开始工作。
var params =
response_type: "code",
client_id: "YOUR_CLIENT_ID",
redirect_uri: "REDIRECT_URI",
scope: 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://mail.google.com/',
approval_prompt: 'force'
;
问候,
jcvalerio
【讨论】:
节省了我的时间!谢谢!以上是关于Gmail 的 XOAuth2 错误凭据无效的主要内容,如果未能解决你的问题,请参考以下文章
Gmail SMTP,客户端-> 服务器:AUTH XOAUTH2,SMTP 错误:AUTH 命令失败:334
Nodemailer、Heroku、Gmail、无效登录 - 在本地工作