如果没有看到您的 API 网关配置,我不能肯定地说,但这两个要点表明了一种可能性。听起来您的自定义授权人可能与您的OPTIONS
方法挂钩(除了POST
您试图公开的任何内容)。这不应该是这样。
例如,如果您将自定义(令牌类型)授权方附加到OPTIONS
API Gateway 资源的方法,然后在OPTIONS
没有 Authorization 标头的情况下进行调用,您将获得401
.
您的自定义授权方应仅附加到您明确公开的方法。在许多情况下,这只是POST
,但可能包括其他,如PUT
,DELETE
等。
如果这没有帮助,您可以使用 API Gateway 配置以及来自失败OPTIONS
调用的请求/响应标头来更新问题。
更新
我使用 Zappa 部署了一个 HelloWorld 烧瓶应用程序,我想我能够重现您的问题。我正在使用您为自定义授权方链接的蓝图。更改policy.denyAllMethods()
为policy.allowAllMethods()
是我对其所做的唯一更改。
当我部署时,会创建这样的东西:
我能够从不包含标题401
的调用中获取。OPTIONS
Authorization
我添加"cors": true
到我的zappa_settings
中,它创建了一些对 CORS 更友好的东西:
这个配置看起来更好。不再401
来自OPTIONS
,无论是否存在Authorization
标头。
我zappa_settings
的"cors": true
添加看起来像这样:
{
"dev": {
"app_function": "hello.app",
"aws_region": "us-east-1",
"profile_name": null,
"project_name": "flask",
"runtime": "python3.6",
"s3_bucket": "zappa-xxxxxxxxx",
"cors": true
},
"authorizer": {
"arn": "arn:aws:lambda:us-east-1:xxxxxxxxxxx:function:flask-authorizer",
"result_ttl": 0
}
}