Google OpenID Connect:如何验证id_token?

nic*_*icq 6 openid google-api oauth-2.0 google-oauth openid-connect

我创建了Backend服务器,它从移动应用程序(iOS)获取ID令牌.如何验证此令牌是否正常并且可以安全地使用它?

官方Google有关验证令牌的文档:

https://developers.google.com/identity/protocols/OpenIDConnect#validatinganidtoken

它建议在本地验证ID令牌,而不向Google发送验证请求.可以像在文档中那样在本地检查ID Token中的某些字段,或者我是否应该向Google发送一些请求以验证令牌?

Google文档提到有关调试和验证ID令牌的方法:

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123

但它不建议在生产中使用它.我还考虑过使用Access Token和Id Token,并首先验证Access Token:

https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=

但它是否使验证客户端凭据(移动应用程序,Web应用程序)的整个过程更加安全?

DaI*_*mTo 2

首先我要说的是我不在谷歌工作。然而,自 2012 年以来,我一直在使用 Google Oauth2 进行开发。不久前,我问了一位 Google 员工这个问题。

他的建议是,如果您有刷新令牌,只需请求新的访问令牌即可。如果它不好,服务器将返回错误。如果您有访问令牌,则发送请求(如果访问令牌错误),服务器将返回错误。

首先验证它并没有多大意义,只需为您发出的每个请求向服务器发送两个请求即可。从长远来看,您要做的就是防止您发出的一小部分请求出现错误。

我从来没有关心过 id 令牌。Id 令牌是一个 jwt,所以我认为你应该能够打开它。

更新

您应该咨询验证 id 令牌的完整性

您也可以自己做一些检查。如果您解密或通过调用 tokeninfo 端点,则id 令牌是一个jwt

{
  "iss": "https://accounts.google.com",
  "azp": "407408718192.apps.googleusercontent.com",
  "aud": "407408718192.apps.googleusercontent.com",
  "sub": "11720055326",
  "at_hash": "HQVaIRLqmsjaTt8KoOIQ",
  "name": "Linda Lawton",
  "picture": "https://lh3.googleusercontent.com/a-/AAuE7mDuIWqXzrrp-65cIhXSD2HjCI8WYsWHR0fDx5_wQPY=s96-c",
  "given_name": "Linda",
  "family_name": "Lawton",
  "locale": "en",
  "iat": 1567751,
  "exp": 1567755
}
Run Code Online (Sandbox Code Playgroud)
  • iss 应该是https://accounts.google.com
  • aud 将是您的应用程序的客户端 ID 7408718192.apps.googleusercontent.com
  • at_hash 可能还有一些方法可以验证这一点,但我没有打扰