通过令牌验证了解Google登录流程

时间:2014-08-11 15:24:39

标签: android google-plus google-play-services google-authentication

在我的Android应用中,我希望用户能够交换信息。

对我想要使用Google Play服务提供的Google+ Sign-in for Android的用户进行身份验证。流程目前看起来像这样:

  1. 首播:显示"使用Google登录"按钮。
  2. 用户点击按钮并授予权限。
  3. 用户输入消息并发送。在后台,我请求带有ya29...的令牌(GoogleAuthUtil.getTokenWithNotification(...)),将令牌附加到邮件并将其发送到服务器(HTTPS POST)。
  4. 在服务器端,我收到消息+令牌并致电tokeninfo endpoint。然后我验证了audience字段。如果一切看起来都很好,我会从tokeninfo端点抓取user_id并将消息转发给收件人。

    我的问题是:

    • 这个流量是否正确,或者我遗失了什么?

    • 我是否真的需要为每封邮件致电GoogleAuthUtil.getTokenWithNotification(...)

    • 我是否真的必须每次都使用tokeninfo端点验证令牌?

    这是我第一次使用此API和OAuth,所以我不太确定我是否完全理解这个概念。

1 个答案:

答案 0 :(得分:1)

  

此流程是否正确,或者我遗失了什么?

到目前为止,一切都是正确的。但我会在服务器端推荐另一种方法。您不需要向Google发送HTTP请求(之后解析JSON),您只需使用Google提供的库即可。请查看Using OAuth 2.0的底部。

使用Verifying Back-End Calls from Android Apps 中的代码,您可以执行此操作:

Checker checker = new Checker();
GoogleIdToken.Payload payload = checker.check(token);
String mail = payload.getEmail();
  

我是否真的必须为每条消息调用GoogleAuthUtil.getTokenWithNotification(...)?

不,你不是。该令牌有效一段时间(我认为它是一个小时)。因此,将令牌存储在您的应用程序中并将其发送到服务器。如果授权在服务器端失败,因为令牌已过期,您可以返回HTTP 401(未授权),并且您的应用知道它必须生成新令牌。

  

我是否真的必须每次都使用tokeninfo端点验证令牌?

当然你必须验证令牌。你必须防止这些请求被伪造。如果您只接受有效令牌,则向服务器发送错误数据会更复杂。