API Gateway声称正在调用自定义授权者,但在调用前拒绝了。

0

【以下的问题经过翻译处理】 我在API Gateway中设置了一个自定义授权者来验证在Authorization头部中的JWT。对于一些GET资源,授权者运行良好,但是对于一个特定的POST调用,它以403禁止(AccessDeniedException)拒绝:

{
    "message": "User is not authorized to access this resource"
}

我打开了API Gateway日志,并且对于这两个资源,它声称正在使用ID vf0zk6 调用授权者。这是API Gateway日志:

Extended Request Id: d0GmcE2HCYcFrVQ=
Starting authorizer: vf0zk6 for request: f23990ba-c1a4-4c71-9427-d28697735735
Incoming identity: ***************voGFIg
Extended Request Id: d0GmcE2HCYcFrVQ=
Using valid authorizer policy for principal: ************************f8069d
成功完成授权者执行
客户端未被授权执行此操作。
网关响应类型:ACCESS_DENIED,状态码:403
网关响应主体:{"message":"User is not authorized to access this resource"}
网关响应头:{Access-Control-Allow-Headers=Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token, Access-Control-Allow-Origin=*, Access-Control-Allow-Methods=OPTIONS,POST}
网关响应类型:ACCESS_DENIED,状态码:403

我还为自定义授权者Lambda启用了CloudWatch日志。我可以看到它成功的GET资源的日志,但是没有日志显示给失败的POST资源。因此,它看起来是未经调用即失败。这两个资源都使用完全相同的Authorization标头进行调用。

我通过创建新的授权者并将其指向相同的Lambda函数(禁用缓存)来暂时使其工作。但是,第二天,当我重新添加新授权者的缓存时,它再次失败,而没有调用Lambda函数。

(编辑)这与GET vs POST无关;一些 POST 资源成功,另一些则失败。这些请求是相同的,指向相同的授权者,但有些请求在调用自定义授权者 lambda 之前被拒绝,而其他请求则调用 lambda 并正常工作。

1回答
0

【以下的回答经过翻译处理】 我曾通过创建新的授权器并将其指向相同的lambda函数(禁用缓存)来暂时解决它。但是第二天,当我重新添加新授权器的缓存时,它再次失败,没有调用任何lambda函数。

上述提示表明,缓存授权器导致了问题。如果您能够进行GET请求并且随后的GET请求成功,但随后的POST请求失败,则授权器返回的策略仅限于GET方法。

我建议遵循以下文章来解决问题。请参见名为“解决从Lambda授权器返回的“未经授权访问此资源”错误”部分。

profile picture
エキスパート
回答済み 6ヶ月前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ