Google oAuth2 访问令牌:"invalid_grant"
Google oAuth2 Access Token: "invalid_grant"
与 this 类似的问题,只是这些答案已过时且不适用于我目前的情况。
这是我的网络应用程序的登录流程:
- 使用 Google 登录(强制提示,给予离线批准)
- 我成功取回了带有访问令牌和刷新令牌的配置文件
- 我做了一些点点滴滴,然后使用那个刷新令牌生成一个访问令牌并下载用户的联系人列表
这工作正常(上次测试是在一周前)但今天它突然给了我:
error: invalid_grant
我正在使用 Node 的 xoauth2 包,自 6 月以来就没有更新过,所以我不明白为什么这会突然成为一个问题 - 除非 Google 改变了一些东西他们在过去一周左右结束了吗?
我正在使用的调用错误的代码示例:
// User credentials - all verified working + correct
xoauth2gen = xoauth2.createXOAuth2Generator({
user: email,
clientId: configAuth.googleAuth.clientID,
clientSecret: configAuth.googleAuth.clientSecret,
refreshToken: refresh
});
// SMTP/IMAP
xoauth2gen.getToken(function(err, token){
if(err){
return console.log("XOAUTH2 Error: " + err);
}
if(type === "full"){
cb(token);
}
});
编辑:为了完整起见,我在生成刷新令牌时使用的范围是:
app.get('/auth/google',
passport.authenticate('google',
{
scope : ['https://mail.google.com/',
'profile',
'email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.google.com/m8/feeds'],
accessType: 'offline',
approvalPrompt: 'force'
}
));
根据 RFC 6749 invalid_grant 在以下情况下返回:
The provided authorization grant (e.g., authorization code, resource
owner credentials) or refresh token is invalid, expired, revoked, does
not match the redirection URI used in the authorization request, or
was issued to another client.
看看这个here
这最终通过在我的 Gmail 帐户中取消对我的应用程序的授权、删除我存储在 MongoDB 中的刷新令牌并从头开始来解决。看来这只是我更改了某些权限的情况,尚未通过 oAuth2 授予。
如果您是运行使用本地主机的测试服务器,如果您的系统时间(OS时间)不同步,则可能会出现此错误。
我的系统时钟不正确,因为我的 CMOS 电池没电了。每次我重新启动笔记本电脑时,时间都不正确。因此,当 运行
时我会收到此错误
`节点server.js'
然后从前端向我的 express js 后端发出请求
与 this 类似的问题,只是这些答案已过时且不适用于我目前的情况。
这是我的网络应用程序的登录流程:
- 使用 Google 登录(强制提示,给予离线批准)
- 我成功取回了带有访问令牌和刷新令牌的配置文件
- 我做了一些点点滴滴,然后使用那个刷新令牌生成一个访问令牌并下载用户的联系人列表
这工作正常(上次测试是在一周前)但今天它突然给了我:
error: invalid_grant
我正在使用 Node 的 xoauth2 包,自 6 月以来就没有更新过,所以我不明白为什么这会突然成为一个问题 - 除非 Google 改变了一些东西他们在过去一周左右结束了吗?
我正在使用的调用错误的代码示例:
// User credentials - all verified working + correct
xoauth2gen = xoauth2.createXOAuth2Generator({
user: email,
clientId: configAuth.googleAuth.clientID,
clientSecret: configAuth.googleAuth.clientSecret,
refreshToken: refresh
});
// SMTP/IMAP
xoauth2gen.getToken(function(err, token){
if(err){
return console.log("XOAUTH2 Error: " + err);
}
if(type === "full"){
cb(token);
}
});
编辑:为了完整起见,我在生成刷新令牌时使用的范围是:
app.get('/auth/google',
passport.authenticate('google',
{
scope : ['https://mail.google.com/',
'profile',
'email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.google.com/m8/feeds'],
accessType: 'offline',
approvalPrompt: 'force'
}
));
根据 RFC 6749 invalid_grant 在以下情况下返回:
The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.
看看这个here
这最终通过在我的 Gmail 帐户中取消对我的应用程序的授权、删除我存储在 MongoDB 中的刷新令牌并从头开始来解决。看来这只是我更改了某些权限的情况,尚未通过 oAuth2 授予。
如果您是运行使用本地主机的测试服务器,如果您的系统时间(OS时间)不同步,则可能会出现此错误。
我的系统时钟不正确,因为我的 CMOS 电池没电了。每次我重新启动笔记本电脑时,时间都不正确。因此,当 运行
时我会收到此错误`节点server.js'
然后从前端向我的 express js 后端发出请求