gpt4 book ai didi

python - 如何在不引发异常的情况下从 AWS lambda 授权方返回 401

转载 作者:行者123 更新时间:2023-12-04 13:11:19 25 4
gpt4 key购买 nike

我有一个用 Python 编写的 lambda 授权器。
我知道使用以下访问策略我可以返回 200/403 :

{
"principalId": "yyyyyyyy",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Deny",
"Resource": "*"
}
]
},
"context": {
"stringKey": "value",
"numberKey": "1",
"booleanKey": "true"
},
"usageIdentifierKey": "{api-key}"
}
如果客户没有发送任何 token ,我试图返回 401 错误,因此我引发了一个异常:
raise Exception("Unauthorized")
此解决方案的问题在于 AWS lambda 失败,然后执行被标记为失败执行,而不是 lambda 的成功执行。有什么方法可以在不使 lambda 失败的情况下返回 401 吗?
在 lambda 集成中也尝试了以下操作,但没有奏效:
return  {"statusCode": 401, "body" : "Unauthorized"}

最佳答案

这真的很难看,但这是真正发出 401 信号的唯一方法,这意味着“我找不到您的授权 header 或 cookie 或什么都没有,您必须进行身份验证才能做到这一点”。 403 是一个明确的 👎 说“我知道你是谁,你被禁止这样做”。 API Gateway 在这里需要一个奇怪的三元响应:👍/👎/🤷,“抛出一个非常具体的异常”是一种方法。
因此,您无法使用授权方 lambda 自定义响应;你只能给出一个回应文件,说是/不,或者举起你的手并表示“我在这里找不到任何认证 Material ”。要自定义对客户端的响应的形状,您可以使用 Gateway Responses .有了这个,您可以自定义 401/403 响应的 json(或任何内容类型,实际上)的形状。
现在,关于 raise Exception("Unauthorized")污染你的指标,制造模棱两可的真实错误与这个预期错误,我同意,它有点臭。我唯一的建议是记录您设置的错误级别 Metric Filter注意,并将其用作您真正的“出现问题”的指标。

关于python - 如何在不引发异常的情况下从 AWS lambda 授权方返回 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64909861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com