我正在编写一个用于语音聊天的Android应用,并决定使用Google Sign-In对我的后端服务器进行简单的用户身份验证。但是,我不明白应用程序应该如何使用我的后端进行身份验证。当用户使用他的Google帐户登录并且我收到ID令牌时,我可以将ID令牌发送到服务器,然后服务器验证它。那是什么呢?如何验证以下请求,例如当用户发送/接收语音邮件并且应用程序需要上传/下载邮件到服务器?服务器需要知道哪个用户正在发出请求,但ID令牌是不合适的,因为它很快就会过期,其完整性验证是一个复杂且相对较长的过程。
答案 0 :(得分:12)
Google登录API:涉及以下步骤:
{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:
答案 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验证端点。
它继续向您展示您需要做什么。