我创建了一个 Cognito 用户池并为其配置了 API 网关。当我使用 ID 令牌测试授权者时,它能够授权,但我需要授权访问令牌并检查特定范围:
aws.cognito.signin.user.admin
根据我的理解(可能是错误的),如果我设置 OAuth 范围,那么授权者会将令牌读取为访问令牌而不是 id 令牌。
我已经检查了访问令牌的 JWT 并确认它包括:
"token_use": "access"
"scope": "aws.cognito.signin.user.admin openid profile email"
当我到达端点时,我收到一条 401 消息:未经授权
我已经研究了 AWS Docs 和 stackoverflow 几天了,无法弄清楚授权的最后一部分,任何有关检查的帮助将不胜感激。由于这是我第一次使用这项技术,我确信我只是缺少一些简单的配置。
解决方案:您的 API 方法 - 没有 OAuth 范围。如果您想使用访问令牌而不是 id 令牌,请添加 OAuth 范围。
使用 COGNITO_USER_POOLS 授权方时,如果未指定 OAuth Scopes 选项,API Gateway 会将提供的令牌视为身份令牌,并根据用户池中的身份验证所声明的身份。否则,API Gateway 会将提供的令牌视为访问令牌,并根据方法上声明的授权范围验证令牌中声明的访问范围。
(https://aws.amazon.com/premiumsupport/knowledge-center/cognito-custom-scopes-api-gateway/) 上的 Amazon 文档不正确 -curl 命令不包含授权的承载前缀标头。它还没有明确说明您必须在 API 方法中添加 OAuth 范围。
我还想承认它不起作用的一个愚蠢原因,对我来说,这是因为在设置授权者时,我将令牌源设置为“授权者”,但是在邮递员上我使用的是“授权”