首页 > 解决方案 > AWS Cognito AdminInitiateAuth 缺少所有自定义范围

问题描述

我有一个认知用户池,配置了 AWS::Cognito::UserPoolResourceServer 和范围列表,所有这些范围都在 UserPoolClient->AllowedOAuthScopes 上启用。当我通过 UI 身份验证时,令牌包含范围列表

 "scope": "aws.cognito.signin.user.admin labs-mymoney-bills-api/view labs-mymoney-bills-api/edit openid profile labs-mymoney-bills-api/pay email",

出于测试目的,我使用 adminInitiateAuth 来获取令牌,并带有以下参数

  var authParams = {
        AuthFlow: 'ADMIN_USER_PASSWORD_AUTH',
        ClientId: 'myclientid',
        UserPoolId: 'myuserpool',
        AuthParameters: {
            USERNAME: 'myuser',
            PASSWORD: 'herpassword'
        }

    };

结果令牌的范围如下所示

"scope": "aws.cognito.signin.user.admin",

显然,当我尝试使用已定义范围的 API 端点进行身份验证时,它总是未经授权的。

这是一个错误,还是我做错了什么,或者有不切实际的期望?

谢谢

标签: amazon-web-servicesamazon-cognito

解决方案


我相信这不是错误,而是设计使然。只有当您通过 Oauth 端点进行身份验证时,才会返回 Cognito 自定义范围。当您创建 Cognito 域时,Cognito 将创建一个托管 UI/授权服务器,该服务器公开 Oauth 端点。如果配置正确,通过这些端点登录将返回访问令牌中的自定义范围。

通过启动身份验证或管理员启动身份验证登录不是通过 Oauth 端点,因此 Oauth 自定义范围不会包含在令牌中。

我希望这会有所帮助。您可以通过设置 HostedUI 并登录来对此进行测试。您将收到的令牌应包含范围。


推荐阅读