使用Google凭据允许用户访问应用的最佳方式

7
如果您有一个需要用户注册的Android应用程序,并且想让用户通过Google登录,您会如何处理?
我希望在这里不要讨论Google+登录。我们也不使用用户凭据来访问Google API,我也对Google+的其他社交功能不感兴趣。
似乎有很多选择:
- 使用OAuth2.0进行身份验证
Google OAUth2 Login页面中有记录。
这并没有真正提到Android,但它基于OAuth2访问令牌,更重要的是基于JSON Web Token id_token的验证。
这种验证用户的方式还涉及启动WebView,以允许用户登录到他们的Google帐户,并进行id_token的相当复杂的验证。
- 使用OAuth2 / Google Play服务
Google Play服务中有一个示例,更侧重于授权。它使用GoogleAuthUtil.getToken来检索access_token。其中一部分肯定是身份验证,因为对话框状态为“登录到...”。

enter image description here

我是否正确地认为,使用access_token作为身份验证机制(将access token存储为身份验证令牌)是一种不好的做法?
支持Facebook / Twitter登录
我之所以问这个问题,是因为Twitter和Facebook建议您实现“使用...登录”的身份验证过程的方式。
  • {{link1:实施Twitter登录}}
  • {{link2:Android的Facebook登录流程}}
这似乎也完全基于OAuth访问令牌。
还有其他我不知道的选项,允许您使用他们的Google帐户对用户进行身份验证吗?
2个回答

4
你需要的是这个 http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html 即获取ID令牌并使用它登录应用程序的后端。
你是对的。通常,使用访问令牌进行身份验证是一个不好的想法。我们已经多次演示来警告开发人员。 https://docs.google.com/presentation/d/1klTZheiQIhcty6MKvTYS12cw1Vyn4T1R4d60QCRYM60/edit?usp=drive_web 如果没有其他选择,而且只有访问令牌,您可以进行一些额外的验证来使用它进行登录并减轻潜在的安全问题。 ID令牌被设计为OpenIDCOnnect中的身份验证使用的原因就在于此。

还要查看这本食谱 https://developers.google.com/accounts/cookbook/platforms/Hybrid - nvnagr
确实看起来是在Android上完成这个任务的好方法,而不涉及Google Plus。(它确实依赖于Google Play服务)此外,演示也值得点赞。 - ddewaele
1
如果我想在“使用您的Google帐户登录”类型的流程中使用它,那么您在后端数据库中存储什么?只需将用户的电子邮件添加到DB中,并添加一个标志以指示他正在使用Google ID令牌进行身份验证(在接收和验证初始ID令牌后),然后简单地让后端验证每个发送的ID令牌在每个后续REST调用上)。没有必要在后端本身中存储/缓存这些ID令牌,对吧? - ddewaele

2

2
我并不是特别感兴趣于Google+的社交功能,也不想访问Google APIs。我只是想将Google作为身份验证提供者使用。 - ddewaele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接