截至昨天,我的应用程序能够通过oAuth 2.0与google (youtube)进行身份验证,第一次没有问题,但第二次(重新身份验证,相同的应用程序+相同的用户),当我为accessToken交换requestToken时,我得到一个错误:
error : invalid_grant
我用:
grant_type = authorization_code
就像他们建议的那样。以前发生的情况是,在2天前,在重新认证时,网页会说"您之前已经使用此应用程序进行了认证,您想再次授予它访问权限吗?"是什么发生了变化,还是我做错了什么? 我找到了一个解决这个问题的方法(至少对我们来说)。当重定向到accounts.google.com/o/oauth2/auth url时,我们必须同时添加approval_prompt=force和access_type=offline。如果缺少一个,则没有刷新令牌。
此url记录了所有参数,但没有说明刷新令牌:http://code.google.com/apis/accounts/docs/OAuth2WebServer.html
我想我可能在这里找到了答案:
https://groups.google.com/forum/!searchin/oauth2-dev/invalid_grant/oauth2-dev/eaOa6THER0k z4eO-taUFxgJ
问题在于需要发送的"code"参数需要编码。当您将approval_prompt设置为强制时,它将工作,因为返回代码包含url安全的字符。但是,对于第二次授权请求的返回代码,情况并非如此。
对我来说,这解决了它,我希望它对你也一样。