Skip to main content

OIDC example code(不可用,帮理解)

gpt

是的,验证 ID Token 的签名不仅可以确认其真实性和完整性,还可以提取出其中的用户信息,包括用户的唯一标识符 (sub 字段)。

验签并提取用户信息的步骤

  1. 获取 Google 的公钥:从 Google 的 JWKS URI 获取公钥,用于验证 ID Token 的签名。
  2. 解析 ID Token:使用 JWT 库解析 ID Token,提取其中的用户信息。
  3. 验证签名:使用公钥验证 ID Token 的签名,确保其未被篡改。

以下是一个具体的例子,使用 Node.js 和 jsonwebtoken 库来验证 ID Token 并提取用户信息,包括用户的唯一标识符 (sub 字段)。

示例代码

const jwt = require('jsonwebtoken');
const jwksClient = require('jwks-rsa');

// 设置 JWKS 客户端
const client = jwksClient({
jwksUri: 'https://www.googleapis.com/oauth2/v3/certs',
});

// 获取密钥
function getKey(header, callback) {
client.getSigningKey(header.kid, function (err, key) {
if (err) {
callback(err);
return;
}
const signingKey = key.getPublicKey();
callback(null, signingKey);
});
}

// 验证 ID Token 并提取用户信息
const idToken = 'YOUR_ID_TOKEN_HERE';

jwt.verify(
idToken,
getKey,
{
algorithms: ['RS256'],
audience: 'YOUR_CLIENT_ID',
issuer: 'https://accounts.google.com',
},
function (err, decoded) {
if (err) {
console.error('Token verification failed:', err);
} else {
console.log('Token is valid:', decoded);

// 提取用户 ID
const userId = decoded.sub;
console.log('User ID:', userId);
}
}
);

解释

  1. 设置 JWKS 客户端

    • 使用 jwks-rsa 库从 Google 的 JWKS URI 获取公钥。
  2. 获取密钥

    • getKey 函数从 JWKS 客户端获取签名密钥。
  3. 验证 ID Token

    • 使用 jsonwebtoken 库的 verify 方法验证 ID Token。需要指定算法(如 RS256)、受众(audience,即你的客户端 ID)和签发者(issuer,即 https://accounts.google.com)。
  4. 提取用户信息

    • 如果验证成功,decoded 对象将包含 ID Token 的 payload,其中包括用户的唯一标识符 (sub 字段)。

总结

通过上述步骤,你不仅可以验证 ID Token 的签名,还可以提取其中的用户信息,包括用户的唯一标识符 (sub 字段)。这在确保令牌真实性的同时,也能获取到用户的唯一标识,用于后续的用户管理和身份验证。