要解决这个问题,你可以使用 Amazon Cognito 提供的 AWS SDK(Software Development Kit)并通过 AWS SDK 获取 JWK(JSON Web Key)。
以下是使用 AWS SDK for JavaScript 进行此操作的代码示例:
const AWS = require('aws-sdk');
// 创建 AWS.CognitoIdentityServiceProvider 对象
const cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider();
// 定义一个函数获取 Cognito 用户池的 JWK
async function getCognitoJWK(userPoolId) {
try {
// 使用 describeUserPool API 获取用户池的配置信息
const userPoolResponse = await cognitoIdentityServiceProvider.describeUserPool({ UserPoolId: userPoolId }).promise();
// 获取用户池的 JWK 配置
const jwkConfiguration = userPoolResponse.UserPool.JwksConfiguration;
// 返回 JWK 可以为空
return jwkConfiguration && jwkConfiguration.JwksUri ? jwkConfiguration.JwksUri : null;
} catch (error) {
console.error('Error:', error);
throw error;
}
}
// 调用函数并输出结果
getCognitoJWK('yourUserPoolId')
.then(jwkUri => {
console.log('Cognito JWK URI:', jwkUri);
})
.catch(error => {
console.error('Error:', error);
});
这段代码使用 AWS SDK for JavaScript 中的 AWS.CognitoIdentityServiceProvider 类来创建一个 CognitoIdentityServiceProvider 对象,然后使用 describeUserPool API 获取用户池的配置信息,包括 JWK 配置。最后,我们返回 JWK 的 URI。
请确保替换 yourUserPoolId 为你自己的用户池 ID。此代码示例假设你已经正确配置了 AWS 认证凭证,以便能够访问 Cognito 服务。
注意:如果用户池的 JWK 配置中不包含 X5c 字段,那么可能是因为你没有为用户池启用设置签名证书。你可以在 AWS 管理控制台的用户池设置中,使用正确的签名证书启用该设置。