https://www.googleapis.com/oauth2/v4/token在Android上始终返回unsupported_grant_type /无效的grant_type
我有一个使用Google身份验证登录用户的Ionic应用程序。它将id_token和access_token传递给节点服务器,然后使用id_token来验证用户,并将access_token传递给用户的Google帐户。https://www.googleapis.com/oauth2/v4/token在Android上始终返回unsupported_grant_type /无效的grant_type
当从浏览器使用Ionic应用程序时,它使用gapi将用户登录并获取令牌,该令牌工作正常。对于iOS和Android,它使用官方Cordova插件(cordova-plugin-googleplus)。
对于iOS,插件总是返回两个标记,并且都很好。对于Android,不会返回access_token。因此,我按照说明获取了serverAuthCode,而这也起作用。交换一个access_token的serverAuthCode是问题所在。
谷歌官方的指令提供样品的请求
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
client_secret=your_client_secret&
redirect_uri=https://oauth2.example.com/code&
grant_type=authorization_code
我提供的CLIENT_ID和呼叫client_secret用来获取serverAuthCode。我验证了我发送的serverAuthCode看起来是正确的,从“4 /”开始。 redirect_uri有点神秘。我尝试了我能想到的一切,包括与client_id关联的授权重定向URI,null,示例中的URI以及来自Web的许多奇怪建议。无论什么时候,无论从应用还是从了SoapUI,我收到
{
"error": "unsupported_grant_type",
"error_description": "Invalid grant_type: "
}
This post似乎是说,在REDIRECT_URI必须匹配在调用用来获取serverAuthCode。然而,这是由插件设置的,看着它的代码我找不到它被设置在任何地方。
所以我的问题是:任何人都可以告诉我如何获得Android上的access_token?如果上面的帖子是正确的,有没有办法找出插件使用了什么redirect_uri?还是有另一种方式完全获得access_token? This issue提供了一个插件来让插件直接返回一个access_token,但也意味着Google不赞成使用serverAuthCode,所以最好从serverAuthCode获取access_code。
(更新:上面还解决办法并没有在我们的情况下工作,所以我们似乎在这一点上被卡住)
后的尝试新事物日子里,我们终于找到了帖子的编码不正确。不用说,错误响应中的某种信息会很有帮助 - 特别是在这种情况下,因为在测试各种主体格式时,很明显参数已被识别,但仍然返回错误。
仍然不知道为什么在Android上access_token
突然停止返回,首先需要进行此调用。希望这会帮助其他人!
Google说明[此处](https://developers.google.com/identity/protocols/OAuth2WebServer#exchange-authorization-code)。 Google的任何人都在监控这个标签? – Adam