适用于Google App Engine和Android App的Oauth2.0流程

时间:2015-09-17 19:34:23

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

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

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

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

问题是:

  • 我必须一直交换此令牌以进行每次通信 应用程序和Web服务之间?安全吗?
  • 保持沟通的最佳方式是什么?

1 个答案:

答案 0 :(得分: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
  5. 当您在后端服务器上收到令牌时,您应该:

      

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

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