【问题标题】:JWT validation failed: Could not find matching key in public key set for kidJWT 验证失败:在孩子的公钥集中找不到匹配的密钥
【发布时间】:2021-01-26 07:43:45
【问题描述】:

我正在使用 google-auth-library-nodejs 通过 env 变量提供凭据来生成 JWT,类似于来自 here 的示例代码。

const credentials = JSON.parse(JSON.stringify(env.service_account.credentials));
const client = auth.fromJSON(credentials);
const url = 'my_url';
const token = await client.fetchIdToken(url);

稍后使用该令牌进行身份验证时,由于以下错误,请求失败:

JWT 验证失败:在 Kid=7da7843e8637d669bc2a12622cede2a8814d11b1 的公钥集中找不到匹配的密钥

https://jwt.io/#debugger-io确认生成的JWT的child确实是7da7843e8637d669bc2a12622cede2a8814d11b1,但是json中的私钥id是6bd5b5d36f9a4225bd814ff3d6909d95e23e0793

这是json

'{
  "type": "service_account",
  "project_id": "project_id",
  "private_key_id": "6bd5b5d36f9a4225bd814ff3d6909d95e23e0793",
  "private_key": "-----BEGIN PRIVATE KEY-----\nXXXXXXXXXXX\n-----END PRIVATE KEY-----\n",
  "client_email": "my_service_account@project_id.iam.gserviceaccount.com",
  "client_id": "REDACTED",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/my_service_account%40project_id.iam.gserviceaccount.com"
}

孩子应该匹配 privat_key_id 吗?

【问题讨论】:

    标签: jwt jwt-auth google-api-nodejs-client


    【解决方案1】:

    上述问题中提供的client_x509_cert_url 不是正确的x-google-jwks_uri。它实际上必须是https://www.googleapis.com/oauth2/v1/certs

    更改 URI 后,kids 匹配。

    如果有人知道为什么会这样,将不胜感激。

    【讨论】:

      猜你喜欢
      • 2019-08-07
      • 2021-01-04
      • 1970-01-01
      • 2020-07-15
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多