在第三方服务器上验证Android的authToken

时间:2012-03-23 18:34:48

标签: android google-api picasa accountmanager

我正在编写一个Android应用程序,它使用AccountManager来获取令牌。从Android应用程序我可以与谷歌Picasa进行交互 - 它工作正常。

我想要实现的目标是:将一些text + 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应用程序发送的令牌是否正确,这样我就可以保存消息的“文本”部分。

谢谢。

5 个答案:

答案 0 :(得分:7)

停止使用AccountManager并开始使用Google Play服务的GoogleAuthUtil类,然后变得简单。见http://android-developers.blogspot.ca/2013/01/verifying-back-end-calls-from-android.html

答案 1 :(得分:2)

解决方案如下。您可以通过此网址验证令牌:

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上验证从此调用收到的令牌。

答案 2 :(得分:1)

读这个 https://developers.google.com/accounts/docs/OAuth2WebServer

  

Web服务器收到授权代码后,可以进行交换   访问令牌和刷新令牌的授权码。这个   request是HTTPs帖子,包含以下参数:

答案 3 :(得分:1)

我遇到了护照 - 谷歌令牌护照策略,完美地完成了任务。

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

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

答案 4 :(得分:0)

根据此答案中的信息:What is the proper way to validate google granted OAuth tokens in a node.js server?

您可以尝试在网址中使用id_token代替access_token来调用Google的tokeninfo端点。