我在 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)
}
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
开头。