我正在编写一个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应用程序发送的令牌是否正确,这样我就可以保存消息的“文本”部分。
谢谢。
答案 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)
答案 4 :(得分:0)
根据此答案中的信息:What is the proper way to validate google granted OAuth tokens in a node.js server?,
您可以尝试在网址中使用id_token
代替access_token
来调用Google的tokeninfo端点。