Google OpenID Connect:如何验证 id_token?

Google OpenID Connect: How to verify id_token?

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

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

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

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

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

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

但不建议在生产环境中使用。我还考虑过将访问令牌与 Id 令牌一起使用,并首先使用以下方法验证访问令牌:

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

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

首先让我先说我不为 Google 工作。然而,自 2012 年以来,我一直在使用 Google Oauth2 进行开发。不久前,我问了一个 Googler 这个问题。

他的建议是,如果您有刷新令牌,只需请求一个新的访问令牌。如果它坏了服务器将 return 一个错误。如果你有一个访问令牌发送一个请求如果它坏服务器将 return 一个错误。

首先验证它并没有多大意义,您只需为您发出的每个请求向服务器发送两个请求。您要做的就是防止您在长 运行.

中提出的一小部分请求出现错误。

我从来没有为 id 令牌烦恼过。 Id token 是一个 jwt,所以我想你应该可以打开它。

更新

你应该咨询Verifiy the integrity of the id token

你也可以自己做一些检查。 id 令牌是 jwt if you decrypt it you get or by calling the tokeninfo endpoint

{
  "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
}
  • iss 应该是 https://accounts.google.com
  • aud 将是您应用的客户端 ID 7408718192.apps.googleusercontent.com
  • at_hash 可能还有一些方法可以验证这一点,但我没有打扰