Amazon Cognito验证JWT时下载JWKS JSON报400错误求助
问题解决方案
核心问题与修复步骤
URL格式错误
请求URL存在两处问题:- 用户池ID与
.well-known之间缺少必要的斜杠/,正确结构应为{userPoolId}/.well-known - URL末尾多了一个冗余的点
.
修正后的URL示例:
const URL = `https://cognito-idp.eu-central-1.amazonaws.com/你的用户池ID/.well-known/jwks.json`- 用户池ID与
响应状态码判断逻辑错误
原代码中if(response !== 200)逻辑错误,response是Fetch返回的响应对象,并非状态码,正确判断方式是检查response.status属性:if(response.status !== 200) { throw new Error(`请求失败,状态码:${response.status}`) }JWKS数据解析错误
Cognito返回的JWKS是包含keys数组的对象,直接将data赋值给keys会导致后续循环失效,需提取data.keys:const keys = data.keys;键名拼写错误
原代码中key.ktl为拼写错误,正确的密钥类型键名是key.kty:const key_type = key.kty
修正后的完整代码
const getPemKey = async () => { // 替换为你的实际用户池ID const userPoolId = "你的用户池ID"; const URL = `https://cognito-idp.eu-central-1.amazonaws.com/${userPoolId}/.well-known/jwks.json` try { const response = await fetch(URL); if(response.status !== 200) { throw new Error(`请求失败,状态码:${response.status}`) } const data = await response.json(); console.log(data) const keys = data.keys; // 初始化pems对象 const pems = {}; for (let index = 0; index < keys.length; index++) { const key = keys[index] const key_id = key.kid const modulus = key.n const exponent = key.e const key_type = key.kty const jwk = { kty: key_type, n: modulus, e: exponent } const pem = jwkToPem(jwk) pems[key_id] = pem; } console.log(pems) } catch (error) { console.error(error) console.log('无法获取PEM密钥') } }
内容的提问来源于stack exchange,提问作者mariodelta
相关产品推荐
相关产品推荐

