1

我们正在用Android视图和网站编写应用程序。我们的应用程序需要将一些数据与Facebook,Google或Twitter(称为'FGT')相关联,然后点击相关服务以返回true(如果该数据已通过身份验证)。控制流是...AccountManager..getAuthToken之后,如何将该令牌发送给其提供程序以进行身份​​验证?

  1. 的Android生成一些数据
  2. 用户选择的FG或T帐户
  3. getAuthToken
  4. 上传数据+令牌,通过HTTPS POST,我们的网站
  5. 我们的网站(Django的,这不是问题)发送身份验证令牌到FGT
  6. FGT返回true如果喜欢令牌,false如果它不

目标是防止攻击者调制数据并将其投掷到我们的网站curl。我们/不需要将数据一直上传到F,G或T.我们不需要一直到混合应用程序,我们的Web服务将自己认证为F,G或T ,然后使用F,G或T的API以用户名称发布,发送电子邮件或发送推文。

对于这个地方有一个明显的答案,希望只有三个URI,F,G或T各一个,我可以在其中插入Auth令牌。这就是为什么我不希望为Facebook,Google和Twitter中的每一个下载和安装SDK,然后为每个案例编写大量特定于服务的代码。这会弄乱代码,并且当客户端请求Tumblr或MSN时让我搞砸。

(一个相关的问题:什么是的getAuthToken()第二个参数“啊”,“邮件”???)

所以,虽然我继续读书,源代码等岗位显示怎么办困难的事情困难的方式,有人可以告诉我如何轻松做一件容易的事情吗?

回答

1

线程“validating Android's authToken on third party server”回答了子命题“打什么简单的URI来测试令牌?”

神奇的URI,对于谷歌来说是:https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%

下一个问题是如何扑通访问令牌出getAuthToken的。范围也应该是最低的可以显示用户真正住在这里:

String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile"; 
am.getAuthToken(a, SCOPE, false, this, null); 

this类实现AccountManagerCallback<Bundle>并提供方法run(AccountManagerFuture<Bundle> result)。根据文档(如“Android AccountManagerFuture getResult gives IOEXcelption when trying to get authorization token”),可能会调用startActivity()质疑用户授权此活动,或者它可能使用已存储在AccountManager中的令牌。 (并且注意,实现一个类只是为了回复自己是有害的,特别是如果目标方法的名字只是run(),所以如我所说不像我这样做,孩子们!)

结果令牌长52字节,以'ya29。'开头,所以它可能是一个access_token,而不是331个字符,可能是一个id_token。

结果令牌没有绑定到任何特定的通道(其中“通道”是一组唯一的客户端,服务器和范围)。所以,从一个简单的卷曲,我可以打的/tokeninfo URI有了它,并得到这个(净化的)JSONic智慧:

{ 
    "issued_to" : "442575845966-mde4be7eingpb5pntfs839jipsetro6s.apps.googleusercontent.com", 
    "audience" : "424242424242-mde4ab7defghi5jklmn839opqrstuv6s.apps.googleusercontent.com", 
    "user_id" : "424242424242424242424", 
    "scope" : "https://www.googleapis.com/auth/userinfo.profile", 
    "expires_in" : 2272 
} 

所以这个答案就已经形成了,对我来说,缺少的环节所有其他之间我正在尝试阅读的文档。 Aaand现在我需要再次为Facebook做这一切& Twitter ...

0

有一个简单的URL。 每个authtoken都是针对范围授予的。每个范围允许authtoken做某些事情。如果你试图做一些范围允许的事情,那么基于authtoken的有效性,这个事情将失败或成功。

最简单的请求范围可能是'电子邮件'。

如果你去了Oauth2游乐场https://developers.google.com/oauthplayground/你可以尝试使用范围和调用来获得适合你的范围和调用。您将能够看到您需要在应用中复制的网址。

+0

oauthplayground范围原来只是低的https://www.googleapis.com/auth/userinfo.profile。 TX。我现在将写出如何使用它来获得access_token。 (我之前获得了id_token,这是特定于频道的。) – Phlip

相关问题