authentication - Cognito 服务身份验证返回有效的 JWT,但后续 JWT 验证失败

标签 authentication jwt amazon-cognito aws-sdk

我有一个 lambda,它接受用户名和密码并返回 JWT。代码(如下所示)基本上使用 cognito adminInitiateAuth() 来使用用户名和密码来获取 JWT。

        let USER_POOL_CLIENT_ID = "6adc4ziG7GCzYmMwhWWVnJySbP"; 
        let USER_POOL_ID = "us-east-1_upxvqiJUP"; 
        AWS.config.update({region: 'us-east-1'});
            

        const cognito = new AWS.CognitoIdentityServiceProvider();
        let params = {
            AuthFlow: "ADMIN_NO_SRP_AUTH",
            ClientId: USER_POOL_CLIENT_ID, 
            UserPoolId: USER_POOL_ID,
            AuthParameters: {
              USERNAME: event.username,
              PASSWORD: event.password
            }
          };

        //console.log(`${JSON.stringify(params)}`);
        const jwtContainer = await cognito.adminInitiateAuth(params).promise();
        console.log(`jwtContainer = ${JSON.stringify(jwtContainer)}`);

这似乎有效,事实上,确实返回了一个有效的 JWT,其中包含由 jwt.io 解码的 child 。每当我尝试在受 JWT 保护的不同端点上使用 JWT(如下所示)时,我都会收到错误:

curl -v https://myapi.execute-api.us-east-1.amazonaws.com/reset-service-auth-password \
  -H 'Accept-Language: en-US,en;q=0.9' \
  -X POST \
  -d '{"password": "xyz123","confirmPassword": "22221"}' \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Origin: http://localhost:8080" \
  -H 'Authorization: Bearer jwtdataxxxxxxxxxxxxxxxx'

但是当我执行上面的代码时,我收到此错误:

www-authenticate:承载范围 =“aws.cognito.signin.user.admin”错误 =“invalid_token”error_description =“无法在 JWKS 中找到适当的 key 。确保在中提供“ child ” JWT,并且您的 JWKS 有可用于此 ID 的受支持证书”

我检查了我的 JWKS,JWT 中的 child 实际上在 JWKS 中。我不知道下一步该做什么或者到底出了什么问题。

我的授权者期望范围为 aws.cognito.signin.user.admin,而我的客户端不需要 key 。请询问您可能需要帮助我解决此问题的任何说明。

最佳答案

我今天也遇到了同样的问题。我希望你从那时起就明白了,但是,以防万一,也为了其他人......

我遵循了与您相同的调查步骤。我确信 AWS 出了问题。没有。

就我而言, token 是针对我们的生产池生成的,但配置中的开发端点泄漏,并且我们尝试在错误的端点上进行身份验证。

所以我的猜测是您遇到了类似的情况:重新检查您的 URL,您的池 ID 和您请求的 API 之间可能不匹配。

关于authentication - Cognito 服务身份验证返回有效的 JWT,但后续 JWT 验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72387286/

相关文章:

php - 在 php 登录 session 中获取用户名

jwt - 如何获得正确的 Auth0 不记名 token ?

oauth-2.0 - jwtBearerMiddleware 中的安全戳验证器

node.js - JSON Web token (JWT) 安全性

javascript - Cognito 从预注册 Lambda 触发器发送什么样的事件

amazon-web-services - AWS API 网关 + Cognito + Lambda - $context.authorizer.principalId 为空

amazon-web-services - Cognito 访问 token "cognito:groups"丢失

php - 我正在android中制作一个注册页面

java - WIldfly - 身份验证成功后的sql查询

c# - .NET Core WebAPI 依赖注入(inject)解析 null