woj*_*iii 17 android access-token
我使用以下内容来获取可以从Android应用程序访问后端的身份验证.这在此处描述https://developers.google.com/identity/protocols/CrossClientAuth.
StringBuffer sb = new StringBuffer();
sb.append("oauth2:server:client_id:");
sb.append(getString(R.string.google_app_id));
sb.append(":api_scope:");
sb.append("profile email");
final String scope = sb.toString();
String token = GoogleAuthUtil.getToken(Activity.this, mAuthAccount, scope);
Run Code Online (Sandbox Code Playgroud)
(之前使用AccountPicker.newChooseAccountIntent设置了mAuthAccount.)
以上内容返回有时已过期的短期认证代码.我想针对谷歌服务器进行检查,但使用GoogleAuthUtil.getToken返回的令牌字符串调用https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=会返回"无效令牌".
在尝试使用之前,如何验证身份验证代码是否已过期?
编辑:返回的字符串不是令牌,而是授权代码,可以与谷歌API交换以获取令牌(返回的字符串以"/ 4"开头,而不是"/ 1"或"/ 2",如果我记得的话正确).
代码并不总是有效(在我的服务器上),我希望能够检查代码是否可以使用或已过期.
正如您在验证令牌文档中看到的:
https://www.googleapis.com/oauth2/v1/tokeninfo
接受访问令牌并返回有关该访问令牌的信息,包括该访问令牌颁发给哪个应用程序、令牌的预期目标、用户同意的范围、令牌的剩余生命周期和用户 ID。
以下是此类请求的示例:
Run Code Online (Sandbox Code Playgroud)https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3ZgTokenInfo 端点将使用描述令牌或错误的 JSON 数组进行响应。
在线路上,响应类似于以下内容:
Run Code Online (Sandbox Code Playgroud){ "audience":"8819981768.apps.googleusercontent.com", "user_id":"123456789", "scope":"profile email", "expires_in":436 }如果令牌已过期、被篡改或权限被撤销,Google 授权服务器将返回错误。错误显示为 400 状态代码和 JSON 正文,如下所示:
Run Code Online (Sandbox Code Playgroud){"error":"invalid_token"}按照设计,不会提供有关失败原因的附加信息。
invalid_token当令牌过期、被篡改或权限被撤销时,这也是有效的答案
编辑
可以invalid_token在令牌返回后立即接收GoogleAuthUtil.getToken,因为 GoogleAuthUtil 可能已缓存它。在这种情况下,您应该致电GoogleAuthUtil.invalidateToken.
您可以在这里找到更多信息: http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html
编辑2
我只是注意到您的范围内缺少https://www.googleapis.com/auth/plus.login 。请尝试添加它,因为似乎必须使用跨客户端身份。
| 归档时间: |
|
| 查看次数: |
3279 次 |
| 最近记录: |