API Gateway Cognito 授权方未授权 Access Token,但会授权 Id Token:401 Unauthorized

问题描述 投票:0回答:2

我创建了一个 Cognito 用户池并为其配置了 API 网关。当我使用 ID 令牌测试授权者时,它能够授权,但我需要授权访问令牌并检查特定范围:

aws.cognito.signin.user.admin

根据我的理解(可能是错误的),如果我设置 OAuth 范围,那么授权者会将令牌读取为访问令牌而不是 id 令牌。

我的 API 上有一个方法,具有以下授权设置:

我已经检查了访问令牌的 JWT 并确认它包括:

"token_use": "access"

"scope": "aws.cognito.signin.user.admin openid profile email"

当我到达端点时,我收到一条 401 消息:未经授权

我已经研究了 AWS Docs 和 stackoverflow 几天了,无法弄清楚授权的最后一部分,任何有关检查的帮助将不胜感激。由于这是我第一次使用这项技术,我确信我只是缺少一些简单的配置。

amazon-web-services aws-api-gateway amazon-cognito
2个回答
1
投票

解决方案:您的 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 范围。


0
投票

我还想承认它不起作用的一个愚蠢原因,对我来说,这是因为在设置授权者时,我将令牌源设置为“授权者”,但是在邮递员上我使用的是“授权”

© www.soinside.com 2019 - 2024. All rights reserved.