如何验证Google Bearer Token?

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

我在 Google Workspace 中有一个聊天应用,它使用 Google Cloud Function 作为后端。目前云函数无需认证即可调用。必须如此,因为聊天发送的凭证与 IAM 策略不兼容。 因此,我必须通过提取和验证随请求发送的不记名令牌来验证身份验证。我的问题是,每当我尝试验证令牌时,都会收到此错误:

No pem found for envelope: {"alg":"RS256","kid":..

这就是我的代码的样子:


const googleapis = require("googleapis");
const { google } = googleapis;

function getToken(bearerToken) {
  return bearerToken.split(" ")[1];
}

async function verifyIdToken(token, aud) {
  const client = new google.auth.OAuth2();
  const ticket = await client.verifyIdToken({
    idToken: token,
    audience: aud,
  });
  return ticket.getPayload();
}

exports.helloChat = async function helloChat(req, res){

  const token  = getToken(req.headers.authorization)
  const payload = await verifyIdToken(token)

}
google-cloud-platform google-cloud-functions google-workspace google-chat
1个回答
0
投票

OIDC 身份令牌由三个由句点连接的 base64 部分组成:

token = base64(header) + '.' + base64(payload) + '.' + base64(signature)

此错误显示的是 base64 解码的标头:

No pem found for envelope: {"alg":"RS256","kid":..

您的代码对我来说工作正常。验证这行代码是否返回有效的 OIDC 身份令牌:

const token  = getToken(req.headers.authorization)

令牌的前几个字符将以

ey
开头。您的示例标头以
{"alg"
开头,当进行 base64 编码时,以
eyJhbGci
开头。

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