Google登录后端服务器身份验证

时间:2016-05-24 12:37:14

标签: android authentication token backend google-signin

我正在编写一个用于语音聊天的Android应用,并决定使用Google Sign-In对我的后端服务器进行简单的用户身份验证。但是,我不明白应用程序应该如何使用我的后端进行身份验证。当用户使用他的Google帐户登录并且我收到ID令牌时,我可以将ID令牌发送到服务器,然后服务器验证它。那是什么呢?如何验证以下请求,例如当用户发送/接收语音邮件并且应用程序需要上传/下载邮件到服务器?服务器需要知道哪个用户正在发出请求,但ID令牌是不合适的,因为它很快就会过期,其完整性验证是一个复杂且相对较长的过程。

2 个答案:

答案 0 :(得分:12)

Google登录API:涉及以下步骤:

  • 用户使用iOS / Android应用程序登录Google。
  • Google向客户端(iOS / Android应用程序)返回tokenid(以及一些额外信息。请参阅link以获取更多信息)。
  • 客户端将tokenid发送到后端服务器。
  • 服务器使用Google客户端API(或通过发出GET请求来调用google端点,但要注意它有与之关联的网络延迟)以验证令牌的完整性。在此步骤中,应满足某些标准。见Here
  • GoogleAPI会向服务器返回一些信息。什么样的信息? 这样的事情:
  

{u'picture':   的u 'https://lh3.googleusercontent.com/-RD4yn7rqIc8/AAAAAAAAAAI/AAAAAAAALQI/9Ab_kR3_CII/s96-c/photo.jpg',   你的'u':'u'10270538098780639-55',u'family_name':u'Dusad',u'iss':   你'https://accounts.google.com',u'email_verified':是的,你''':   u'Utsav Dusad',u'at_hash':u'BMjN0mWeOMqVVBhjW_W9A',u'given_name':   u'Utsav',u'exp':1484582338,u'azp':   u'85959433390-npk1ss7juimjqt5hrlhm7v2fj2u7593f.apps.googleusercontent.com”,   u'iat':1484578738,u'locale':u'en-GB',u'email':   u'utsavdusad@gmail.com',u'aud':   u'85959433390-npk1ss7juimjqt5hrlhm7v2fj2u7593f.apps.googleusercontent.com'}

sub:主题。用户身份。不要将电子邮件ID用作主键,因为它可能会更改。使用userID。

  

用户的标识符,在所有Google帐户中都是唯一的,永远不会   重复使用。 Google帐户可以在不同位置发送多封电子邮件   及时,但子值永远不会改变。在你的内部使用sub   application作为用户的唯一标识符键。

有关详细信息,请参阅here

  • 服务器返回成功登录客户端。
  • 客户端使用tokenID进行后续(HTTP POST,GET)请求。
  • 服务器通过验证idtoken并检查'sub'信息(sub是用户的唯一标识)来提供数据。

答案 1 :(得分:2)

看起来您需要的解释是: https://developers.google.com/identity/sign-in/web/backend-auth#verify-the-integrity-of-the-id-token

它解释道:

  

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

     

ID令牌是使用适当的正确签名的JWT   Google公钥(以JWK或PEM格式提供)。 aud的价值   ID令牌中的等于您的应用程序的客户端ID之一。这个检查   是必要的,以防止发布给正在使用的恶意应用程序的ID令牌   在应用程序的后端服务器上访问有关同一用户的数据。该   ID令牌中的iss值等于accounts.google.com或   https://accounts.google.com。 ID令牌的到期时间(exp)具有   不及格。如果您的身份验证请求指定了托管域,   ID令牌具有与您托管的Google Apps匹配的高清版权声明   域。

它声明:

  

而不是编写自己的代码来执行这些验证步骤,   我们强烈建议您使用Google API客户端库   平台,或调用我们的tokeninfo验证端点。

它继续向您展示您需要做什么。

相关问题