我们在验证 Google 个 ID 令牌时使用哪个密钥

Which Key Do We Use When Verifying Google ID Tokens

我们正在验证 ColdFusion 服务器上的 Google ID 令牌。我们一切正常,但有一件事让我感到困惑:

在说明中 here Google 说要使用他们的 public 密钥来验证令牌。当我们检索密钥时,在 JSON 对象中有 2 个。无论我们获取 PEM 还是 JWT,都有 2 个密钥。

JWT 示例:

PEM 示例:

我们如何知道使用哪个密钥?通过测试,我们发现一个有效,并且我们能够解码 JWT 以进行验证,而另一个无效。现在我们必须同时尝试这两种方法,看看哪一种有效。我们是否遗漏了一些东西来指示要使用这些键中的哪一个?

密钥由 key Id "kid" 标识:

The "kid" (key ID) parameter is used to match a specific key.

如果是 JWK,您会在 JSON 中看到 kid 值,并且您可以在 PEM 示例的第一列中看到相同的 kid 值。您的令牌在 header 部分有一个“kid”声明。解码 header 以提取孩子。

例如:

{
  "typ":"JWT",
  "alg":"RS256",
  "kid":"3dd6ca2a81dc2fea8c3642431e7e296d2d75b446"
}