amazon-web-services - 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 端点进行身份验证时,它总是未经授权的。
这是一个错误,还是我做错了什么,或者有不切实际的期望?
谢谢
解决方案
我相信这不是错误,而是设计使然。只有当您通过 Oauth 端点进行身份验证时,才会返回 Cognito 自定义范围。当您创建 Cognito 域时,Cognito 将创建一个托管 UI/授权服务器,该服务器公开 Oauth 端点。如果配置正确,通过这些端点登录将返回访问令牌中的自定义范围。
通过启动身份验证或管理员启动身份验证登录不是通过 Oauth 端点,因此 Oauth 自定义范围不会包含在令牌中。
我希望这会有所帮助。您可以通过设置 HostedUI 并登录来对此进行测试。您将收到的令牌应包含范围。
推荐阅读
- javascript - Bootstrap 3网站标题菜单折叠在中间屏幕宽度中不起作用
- django - 将 unix 时间戳存储为 IntegerField
- caching - 依赖微服务中的数据复制并在每个微服务中相应地缓存以减少延迟
- javascript - 通过 javascript 中的预定义键集对 JSON 进行排序
- multithreading - 在多线程应用程序中使用类级别谓词是否安全
- node.js - 带有 ID 数组的 MongoDB 查询
- php - 使用带有 AWS SES API 的 Swift Mailer 消息,但带有流
- python - Python:带字符串插值的动态 json
- python - 每个请求两个连接
- kubernetes - Kubernetes | 推出撤消与部署到旧版本有什么区别?