8

我正在编写一个 Android 应用程序,它使用 AccountManager 来获取令牌。通过一个安卓应用程序,我可以与 Google Picasa 进行交互——它运行良好。

我想要实现的是:将一些文本+ authToken 发送到我的第三方服务器,然后在保存文本之前检查令牌是否正确。现在的问题是:是否可以仅在令牌本身(可能还有电子邮件地址)上确定特定令牌的 authToken 是否正确。

我已经编写了服务器部分,它接受令牌(从 android 应用程序发送),然后向 URL 地址发出请求:

https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%

我得到的是以下 JSON:

{
  "error" : "invalid_token"
}

但是这里的链接http://oauthssodemo.appspot.com/step/4指出,如果令牌是正确的,我应该收到不同的 JSON 响应。你能告诉我我做错了什么吗:我相信检查令牌有效性的方法真的没有那么简单,但我宁愿实现整个 openid 什么的。即使是这种情况,我如何检查android应用发送的令牌是否正确,以便我可以保存消息的“文本”部分。

谢谢你。

4

5 回答 5

7

停止使用 AccountManager 并开始使用 Google Play 服务的 GoogleAuthUtil 类,然后它就变得容易了。请参阅http://android-developers.blogspot.ca/2013/01/verifying-back-end-calls-from-android.html

于 2013-01-25T01:09:33.800 回答
2

解决方法如下。您可以通过此 url 验证令牌:

https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%

但就我而言,我试图验证“授权码”而不是“访问令牌”,如您在此处看到的:https ://code.google.com/oauthplayground/

如果您使用的是 Android 和 OAuth,请不要使用

lh2 

而是使用以下内容作为服务名称:

http://picasaweb.google.com/data/

所以你应该调用 getAuthToken 如下

getAuthToken(account, "http://picasaweb.google.com/data/" , true, null, null);

然后,您可以在上面发布的 URI 上验证从此调用中收到的令牌。

于 2012-04-05T10:35:12.267 回答
1

阅读此 https://developers.google.com/accounts/docs/OAuth2WebServer

Web 服务器收到授权码后,可以用授权码交换访问令牌和刷新令牌。此请求是一个 HTTPS 帖子,包含以下参数:

于 2012-07-19T10:23:12.330 回答
1

我遇到了完美执行任务的护照-谷歌-令牌护照策略。

https://www.npmjs.com/package/passport-google-token

上面的链接中提供了更多详细信息。

于 2015-03-27T07:33:41.257 回答
0

根据此答案中的信息:验证 google 在 node.js 服务器中授予 OAuth 令牌的正确方法是什么?,

您可以尝试在 url 中使用id_token而不是access_token调用 Google 的 tokeninfo 端点。

于 2013-05-01T23:15:18.963 回答