【问题标题】:Oauth2.0 flow for Google App Engine and Android App适用于 Google App Engine 和 Android App 的 Oauth2.0 流程
【发布时间】:2015-12-14 19:26:36
【问题描述】:

我看到一些与此问题相关的类似问题,但这些问题太老了,无法考虑,所以我会在这里再问一次。

我有一个 Android 应用,它需要通过网络服务进行身份验证才能交换将存储在 Google App Engine 上的数据。为此,我想使用 OAuth2.0 在我的应用程序和 Web 服务之间提供一种身份验证机制,如下所示:https://developers.google.com/identity/protocols/OAuth2WebServer?hl=en 和这里https://developers.google.com/identity/protocols/CrossClientAuth

我已经在 Web 服务端对令牌进行验证,如文档所示。我唯一不清楚的部分是在 Android 上获取刷新令牌并在 Web 服务上验证后,在 GAE Web 服务和 Android 上做什么。

问题是:

  • 每次通信时我必须一直交换这个令牌吗 应用程序和网络服务之间?安全吗?
  • 保持通信向前发展的最佳方式是什么?

【问题讨论】:

  • 这在关于流的 oauth2 帮助中有介绍。见 3 腿 oauth2
  • Google Developers 上 3 legged oauth2 的文档达到了您获得 Token 的程度,我的问题还是一样。
  • 不,它更进一步。例如,它说明获得的访问令牌的到期时间。查看示例和教程,例如驱动 api 示例
  • 我发现了这个stackoverflow.com/questions/11631928/…,这与我现在遇到的问题相同。无论如何,该线程已经过时了,我无法在那里发表评论。
  • 但不是同一个问题。一个是关于在移动应用程序和网站之间重用令牌,因此用户不需要两次授予 oauth 权限。

标签: android google-app-engine oauth-2.0 google-play-services google-oauth


【解决方案1】:

对此进行研究后,我正在使用此身份验证流程:

  1. 如下所示登录应用程序:https://developers.google.com/identity/sign-in/android/sign-in
  2. 登录后,获取令牌。
  3. 通过 HTTPS 将令牌发送到后端服务器
  4. 使用 GoogleIdTokenVerifier 验证器验证后端服务器上的令牌(您也可以调用 tokeninfo 端点),如下所示:https://developers.google.com/identity/sign-in/android/backend-auth

当您在后端服务器上收到令牌时,您应该:

通过 HTTPS POST 收到 ID 令牌后,您必须验证令牌的完整性。要验证令牌是否有效,请确保满足以下条件:

  • ID 令牌是使用适当的 Google 公钥(以 JWK 或 PEM 格式提供)正确签名的 JWT。
  • ID 令牌中的 aud 值等于您应用的客户端 ID 之一。此检查对于防止向恶意应用发出的 ID 令牌被用于访问您应用后端服务器上同一用户的数据是必要的。
  • ID 令牌中 iss 的值等于 accounts.google.com 或 https://accounts.google.com
  • ID 令牌的到期时间 (exp) 尚未过去。 如果您的身份验证请求指定了托管域,则 ID 令牌具有与您的 Google Apps 托管域匹配的 hd 声明。
  1. 用户已通过身份验证。每次与后端服务器通信时,必须在请求头上发送令牌,然后后端服务器每次都需要对其进行验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    相关资源
    最近更新 更多