【发布时间】:2021-03-25 04:13:27
【问题描述】:
我有一个用 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}"
}
如果客户没有发送任何令牌,我会尝试返回 401 错误,因此我会引发异常:
raise Exception("Unauthorized")
此解决方案的问题在于 AWS lambda 失败,然后将执行标记为失败执行,而不是 lambda 的成功执行。有什么方法可以返回 401 而不会导致 lambda 失败?
还在 lambda 集成中尝试了以下类似但没有奏效:
return {"statusCode": 401, "body" : "Unauthorized"}
【问题讨论】:
-
引发该异常是从授权方返回 401 的唯一方法。您无法像在 lambda 代理集成中那样自定义状态代码/响应正文。
-
@Phydeaux 我们独立地遇到了与 OP 相同的问题。你的评论似乎错过了这个问题的真正问题。 OP 和我们都尝试了引发异常方法。 OP问这个问题的原因我认为是因为引发异常方法不是wordking。使用python和代码
raise Exception("Unauthorized")制作lambda授权会导致lambda函数执行失败(即异常没有被捕获调用 lambda 处理程序的代码)。此外,调用 api 网关的响应是 500 内部服务器错误。 -
所以对我来说,AWS 中的 api 网关/lambda 处理程序代码似乎有问题,没有按文档说明工作。因为我希望引发未经授权的异常会导致 401 未经授权而不是 500 内部服务器错误(当未捕获的 lambda 函数抛出错误时,默认响应也是如此)。
-
附注我想修改问题以提供更多有用的信息。但遗憾的是,建议的编辑队列已满,我没有足够的代表开始审查编辑。
-
@M.D.请随时在此处添加详细信息,我将编辑帖子
标签: python amazon-web-services aws-lambda