You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API Gateway Options方法返回403:自定义授权器绑定问题求助

解决API Gateway自动生成的OPTIONS方法绑定自定义授权器导致的403问题

我完全懂你遇到的麻烦——用SAM部署带自定义授权器的API并启用CORS时,自动生成的OPTIONS预检请求被强制绑定了授权器,可浏览器发起的OPTIONS请求本来就不会带Authorization头,直接触发403太闹心了。

问题根源

SAM在你配置DefaultAuthorizer时,默认会把这个授权器应用到所有API方法上,包括为CORS自动创建的OPTIONS方法。但按照CORS规范,预检请求(OPTIONS)的作用只是确认服务器是否允许后续跨域请求,不需要携带身份凭证,所以授权器会直接拒绝这类无授权头的请求。

解决方案:禁用预检请求的默认授权器

你只需要在AWS::Serverless::Api的Auth配置里新增AddDefaultAuthorizerToCorsPreflight: false参数,就能告诉SAM:别给自动生成的OPTIONS预检请求绑定默认授权器。

修改后的template.yaml关键部分如下:

Resources:
  TestApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      Auth:
        DefaultAuthorizer: testAuthoriser
        AddDefaultAuthorizerToCorsPreflight: false  # 新增这一行,核心修复
        Authorizers:
          testAuthoriser:
            FunctionArn:
              Fn::ImportValue: !Sub test-custom-autoriser
            Identity:
              Header: Authorization
              ValidationExpression: ^Bearer [-0-9a-zA-Z\._]*$
            ReauthorizeEvery: 30

额外优化建议

你的全局CORS配置里参数带了多余的单引号,SAM支持直接用不带引号的通配符,修改后更简洁还能避免潜在的解析问题:

Globals:
  Function:
    Runtime: nodejs8.10
  Api:
    Cors:
      AllowMethods: "*"
      AllowHeaders: "*"
      AllowOrigin: "*"

重新部署模板后,自动生成的OPTIONS方法就不会再绑定自定义授权器,浏览器的预检请求能正常通过,而你的GET请求依然会走自定义授权验证,完美兼顾安全和跨域需求。

内容的提问来源于stack exchange,提问作者GeekOnGadgets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:05:18