我正在开发带有Angular和Cordova插件的Android应用,我希望将其与Google身份验证集成。我已经安装了cordova-plugin-googleplus,并且已成功集成到应用程序中。当用户登录时,我得到一个响应,可以获取accessToken,配置文件用户信息和refreshToken。
现在,我想实现一种功能,以刷新令牌,而不会每小时以新的提示屏幕打扰用户。
我设法续订了accessToken,但只在第一次使用时有效
我已经使用了两种方式:
curl -X POST \
'https://oauth2.googleapis.com/token?code=XXXXXXXXXXXXXXXX&client_id=XXXXXXXXXXXXXXXX.apps.googleusercontent.com&client_secret=YYYYYYYYYYYY&grant_type=authorization_code' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded'
重点是,当用户首次登录(使用cordova-plugin-googleplus)时,我收到具有这种格式的refreshToken
4/rgFU-hxw9QSbfdj3ppQ4sqDjK2Dr3m_YU_UMCqcveUgjIa3voawbN9TD6SVLShedTPveQeZWDdR-Sf1nFrss1hc
[如果过一阵子我尝试以上述任何一种方式刷新令牌,我将获得一个成功的响应,其中包含新的accessToken和新的refreshToken。并且新的refreshToken具有其他格式
1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J
第二次尝试更新令牌时,我将令牌替换为第一个请求中返回的令牌
curl -X POST \
'https://oauth2.googleapis.com/token?code=1/FTSUyYTgU2AG8K-ZsgjVi6pExdmpZejXfoYIchp9KuhtdknEMd6uYCfqMOoX2f85J&client_id=XXXXXXXXXXXXXXXX.apps.googleusercontent.com&client_secret=YYYYYYYYYYYY&grant_type=authorization_code' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/x-www-form-urlencoded'
但是这次,两种方式(Curl和Java)我都遇到相同的错误。
{
"error" : "invalid_grant",
"error_description" : "Malformed auth code."
}
我读过这个thread,这是将clientId指定为电子邮件的问题,但是我也没有找到解决方法,因为第一次登录是使用客户端ID'XXXXXXX.apps.googleusercontent.com'完成的并且如果我从Google帐户设置了一封电子邮件,它说这是“未知的Oauth客户端”
[由于我被困了几天,希望任何人都能帮上忙
这是授权授予流程。为简单起见,请遵循以下步骤。