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 Antwort
0

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

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

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

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen