当前位置: 首页 > 知识库问答 >
问题:

试图从google获取oAuth令牌的_grant无效

柳昊焱
2023-03-14

在试图从谷歌获取oAuth令牌以连接到他们的联系人api时,我不断收到一个无效的\u grant错误。所有的信息都是正确的,我让tripple检查了一下,这让我很困惑。

有人知道是什么导致了这个问题吗?我尝试过为它设置一个不同的客户端id,但我得到了相同的结果,我尝试过连接许多不同的方法,包括尝试强制身份验证,但仍然是相同的结果。

共有3个答案

逑俊楚
2023-03-14

当我向OAuth发送用户时,没有明确请求“脱机”访问时,我遇到了这个问题:“你想让这个应用程序允许触摸你的东西吗?”页

确保在请求中指定access_type=脱机。

详细信息:https://developers.google.com/accounts/docs/OAuth2WebServer#offline

(另外:我认为谷歌在2011年末增加了这一限制。如果你有之前的旧代币,你需要将你的用户发送到权限页面以授权离线使用。)

郦楷
2023-03-14

尽管根据bonkydog的回答在我的请求中指定了“脱机”access_type,我还是遇到了同样的问题。长话短说,我发现这里描述的解决方案对我有效:

https://groups.google.com/forum/#!topic/google analytics数据导出api/4uNaJtquxCs

本质上,当你在谷歌应用编程接口的控制台中添加一个OAuth2客户端时,谷歌会给你一个“客户端标识”和一个“电子邮件地址”(假设你选择“网络应用”作为你的客户端类型)。尽管谷歌有误导性的命名约定,但他们希望你在访问他们的OAuth2应用编程接口时,发送“电子邮件地址”作为client_id参数的值。

这适用于调用以下两个URL:

  • https://accounts.google.com/o/oauth2/auth
  • https://accounts.google.com/o/oauth2/token

请注意,如果您使用“客户ID”而不是“电子邮件地址”来调用第一个URL,则调用该URL将成功。但是,当试图从第二个URL获取承载令牌时,使用该请求返回的代码将不起作用。相反,您将收到一条“错误400”和一条“无效授权”消息。

越涵衍
2023-03-14

虽然这是一个古老的问题,但似乎许多人仍然会遇到它——我们花了几天时间自己追踪这个问题。

在OAuth2规范中,“invalid_grant”有点像是对与无效/过期/撤销令牌(auth grant或refresh token)相关的所有错误的总括。

对我们来说,问题有两个方面:

>

  • 用户已主动撤销对我们应用程序的访问
    有道理,但请注意:撤销后12小时,谷歌停止在其响应中发送错误消息:"error_description":"令牌已被撤销。"
    这是相当误导,因为您会假设错误消息一直存在,但事实并非如此。可以在应用权限页检查应用是否仍然具有访问权限。

    用户已重置/恢复其谷歌密码
    2015年12月,谷歌更改了其默认行为,以便非谷歌应用程序用户的密码重置将自动撤销用户的所有应用程序刷新令牌。撤销时,错误消息遵循与之前相同的规则,因此您只能在前12小时内获得“错误描述”。似乎没有办法知道用户是手动撤销了访问权限(有意的),还是因为密码重置(副作用)而发生的。

    除此之外,还有无数其他可能引发错误的潜在原因:

    我写了一篇短文,总结了每一项,并提供了一些调试指导,以帮助找到罪魁祸首。希望有帮助。

  •  类似资料:
    • 我正在开发一个web应用程序来从“https://api.ebay.com/sell/analytics/v1/traffic_report”获取数据 我有一个ebay开发者帐户,clientID:MyClientId ClientSecret:MyClientSecret AppID:MyAppId 要实现这一点,我需要一个OAuth令牌 我浏览url https://signin.ebay.c

    • 问题内容: 尝试在SafariViewController中使用Facebook OAuth。首先,我使用SafariViewController打开authURL,如果用户在Safari上登录Facebook,它将重定向它们并返回带有该特定服务令牌的OAuth URL,例如Instagram 响应:https : //www.facebook.com/connect/login_success.

    • 问题内容: 尝试访问API时,我正在努力从Google提取请求令牌。我正在收到标准的400回复。我发送的请求几乎与他们提供的OAuth运动场中生成的请求相同。 我正在使用匿名机密/密钥,并构造了如下的基本字符串: 为了调试发送的请求,我在eclipse中设置了TCP / IP监视。但是,这仅监视Http流量,因此,以下内容反映了所请求的内容的99%。 你能告诉我我做错了什么吗?提前致谢。 下面是我

    • 如何从OAuth令牌对象获取calendarId(用户的电子邮件)? 详细信息:使用Google Javascript客户端库。授权后,我需要获取用户的电子邮件,这是来自令牌对象的calendarId。 对于Google Plus,文档称“me”关键字可以用来指代当前经过身份验证的用户。它不适用于日历API。我应该为日历API做什么? 请帮帮忙

    • 我正在尝试在多租户应用程序中实现 OAuth 2.0 授权代码流。 我首先在 请求了“openid 配置文件电子邮件”范围的授权,然后使用我获得的代码以及 、client_id、client_secret redirect_uri 作为访问令牌 我得到的响应只包含< code>id_token和< code>token_type=Bearer。为什么没有给我< code>access_token和

    • 我的问题是如何使用OAuth2.0从刷新令牌中获取访问令牌。我还没有找到任何从刷新令牌中获取访问令牌的例子。 我参考了[Google+API参考],但他们使用HTTP方法提到了它。2请用C#提供一些使用Google+API提供的方法的例子。