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

ele*_*nor 8 android picasa google-api accountmanager

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

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

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

https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%
Run Code Online (Sandbox Code Playgroud)

我得到的是以下JSON:

{
  "error" : "invalid_token"
}
Run Code Online (Sandbox Code Playgroud)

但是这里的链接http://oauthssodemo.appspot.com/step/4表明,如果令牌是正确的,我应该收到不同的JSON响应.你能告诉我我做错了什么:我相信检查令牌有效性的方法真的不是那么简单,但我宁愿实现整个openid或其他东西.即使是这种情况,如何检查Android应用程序发送的令牌是否正确,这样我就可以保存消息的"文本"部分.

谢谢.

Tim*_*ray 7

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

  • 可能为时已晚,但使用AccountPicker类让用户选择一个帐户,这将为您提供accountName (2认同)

ele*_*nor 2

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

https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%
Run Code Online (Sandbox Code Playgroud)

但就我而言,我试图验证“授权代码”而不是“访问令牌”,如下所示:https: //code.google.com/oauthplayground/

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

lh2 
Run Code Online (Sandbox Code Playgroud)

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

http://picasaweb.google.com/data/
Run Code Online (Sandbox Code Playgroud)

所以你应该按如下方式调用 getAuthToken

getAuthToken(account, "http://picasaweb.google.com/data/" , true, null, null);
Run Code Online (Sandbox Code Playgroud)

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