如何从OICD认证的服务器获取id令牌?

问题描述 投票:0回答:1

我正在尝试从 vercel 前端(不是客户端)连接到我的 Cloud run 后端。

我已经设置了工作负载联合身份,并且如果我运行以下命令,连接似乎可以正常工作:

    authClient = ExternalAccountClient.fromJSON({
      type: "external_account",
      audience: `//iam.googleapis.com/projects/${GCP_PROJECT_NUMBER}/locations/global/workloadIdentityPools/${GCP_WORKLOAD_IDENTITY_POOL_ID}/providers/${GCP_WORKLOAD_IDENTITY_POOL_PROVIDER_ID}`,
      subject_token_type: "urn:ietf:params:oauth:token-type:jwt",
      token_url: "https://sts.googleapis.com/v1/token",
      service_account_impersonation_url: `https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${GCP_SERVICE_ACCOUNT_EMAIL}:generateAccessToken`,
      subject_token_supplier: {
        // Use the Vercel OIDC token as the subject token.
        getSubjectToken: getVercelOidcToken,
      },
    });

这很好,但是我真正需要的是

GoogleAuth
对象,我可以用它来获取连接到云运行后端所需的 ID 令牌 - 如下所示:

  const auth = new GoogleAuth({
    scopes: "https://www.googleapis.com/auth/cloud-platform",
    projectId: GCP_PROJECT_ID,
  });
const idTokenclient = await auth.getIdTokenClient(backend_url);
const response = await idTokenclient.request({ url: backend_url });

我不明白的是如何从

ExternalAccountClient
GoogleAuth
客户端。有没有办法将 accessToken 或某种凭据传递给
GoogleAuth
调用? (我相信现在只是尝试重用机器上的本地身份验证凭据,而这些凭据在无服务器环境中不可用?)


编辑:温和的平:)真的很想在这里得到答案(或一些指示!)

authentication google-cloud-platform
1个回答
0
投票

要获取令牌,您需要从 authClient 调用 getAccessToken

const idToken = await authClient?.getAccessToken();
console.log("OIDC Token:", idToken.token);

© www.soinside.com 2019 - 2024. All rights reserved.