[在第二次尝试刷新令牌时如何修复“格式错误的身份验证代码”?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[在第二次尝试刷新令牌时如何修复“格式错误的身份验证代码”?相关的知识,希望对你有一定的参考价值。

我正在开发带有Angular和Cordova插件的android应用,我希望将其与Google身份验证集成。我已经安装了cordova-plugin-googleplus,并且已成功集成到应用程序中。当用户登录时,我得到一个响应,可以获取accessToken,配置文件用户信息和refreshToken。

现在,我想实现一种功能,以刷新令牌,而不会每小时以新的提示屏幕打扰用户。

我设法续订了accessToken,但只在第一次使用时有效

我已经使用了两种方式:

  1. 使用以下数据发送卷曲请求
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'
  1. 使用Java的Google API客户端库在服务器端实现,并主要遵循以下[code]

重点是,当用户首次登录(使用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客户端”

[由于我被困了几天,希望任何人都能帮上忙

答案

这是授权授予流程。为简单起见,请遵循以下步骤。

以上是关于[在第二次尝试刷新令牌时如何修复“格式错误的身份验证代码”?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 访问令牌在第二次尝试使用 ParseFacebookUtils 登录 Facebook 时为空

Spring Boot + OAuth + JWT + MySQL 刷新令牌第二次不起作用

Ajax 表单提交在第一次提交时返回错误,但在第二次单击时提交

Android - Singleton Class仅在第二次刷新时更新

JWT - 第二次刷新后的 TOKEN_EXPIRED

在单独的模块中,Python getpass 在第二次尝试时工作