Amazon web services API网关选项方法403

Amazon web services API网关选项方法403,amazon-web-services,aws-lambda,aws-api-gateway,aws-sam,Amazon Web Services,Aws Lambda,Aws Api Gateway,Aws Sam,我有一个带有API网关的自定义授权程序。当通过SAM模块部署时在启用CORS时也会创建Options方法。我真的不明白的是,为什么自定义授权人会附加到Optionsendpoint 当我尝试从浏览器调用端点时抛出403,当我从Options方法中删除Authorization时,它工作得非常好 下面是模板。yaml AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Globals:

我有一个带有API网关的
自定义授权程序
。当通过
SAM模块部署时
在启用
CORS
时也会创建
Options方法
。我真的不明白的是,为什么自定义授权人会附加到
Options
endpoint

当我尝试从浏览器调用端点时抛出
403
,当我从
Options
方法中删除
Authorization
时,它工作得非常好

下面是
模板。yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'

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

Resources:
  TestApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      Auth:
        DefaultAuthorizer: testAuthoriser
        Authorizers:
          testAuthoriser:
            FunctionArn:
              Fn::ImportValue: !Sub test-custom-autoriser
            Identity:
              Header: Authorization
              ValidationExpression: ^Bearer [-0-9a-zA-Z\._]*$
              ReauthorizeEvery: 30 

  Version:
    Type: 'AWS::Serverless::Function'
    Properties:
      FunctionName: test
      CodeUri: src/test
      Handler: index.test
      Events:
        EndPoint:
          Type: Api
          Properties:
            RestApiId: !Ref TestApi
            Path: /test
            Method: get
            Auth:
              Authorizer: testAuthoriser

我也在标题中启用了
“Access-Control-Allow-Origin”:“*”
。不知道这里发生了什么。任何帮助都将不胜感激

对于CORS,AWS API网关将始终启用允许飞行前测试的选项方法。你可以在网站上阅读更多关于这方面的内容

您在浏览器中看到飞行前错误的原因是403 Forbidden来自您的自定义授权人。自定义授权器不返回标题,所以若自定义授权器拒绝请求,您将始终看到飞行前错误


要对此进行调试,请记录自定义授权人返回的策略。你可以在CloudWatch中看到这一点。策略必须包含所请求资源的Allow语句。

答案如下,请参阅aws sam问题

Api:
Cors:
AllowHeaders:“'Access-Control-Allow-Headers,Origin,Accept,X-Request-With,内容类型,访问控制请求方法,访问控制请求头,授权'”
AllowOrigin:“'*'”
认证:
默认授权人:认知授权人
授权人:
认知授权人:
UserPoolArn:yourUserPool

AddDefaultAuthorizartoCorsPreflight:False//Policy确实包含Allow语句-
{“principalId”:“,”policyDocument:{“Version”:“2012-10-17”,“语句”:[{“Action”:“execute api:Invoke”,“Effect”:“Allow”,“Resource”:“arn:RemaingArn”}],“context”:{“scope”:“aws.cognito.sign.user.admin”}
如前所述,如果从选项中删除授权,则一切正常。我建议使用用户ID填充
principalId
。也不确定为什么策略中有
上下文,因为从自定义授权人的角度来看,它没有任何用途。请尝试删除它。最后确保
remainran
与使用实际资源。您可以尝试使用通配符进行测试。
arn:aws:execute api:::::::://code>我尝试了上述建议,但遇到了相同的问题。我相信是它的api网关导致了问题。与此类似
https://github.com/auth0-samples/jwt-rsa-aws-custom-authorizer
嘿,你找到如何删除身份验证了吗
Options
方法中的rizer?这是正确的答案。如果您正在设置DefaultAuthorizer并同时使用Cors属性,则Cors飞行前API的Options方法将使用该默认授权器。您可能不希望这样做,因为您的浏览器可能无法正确处理这些调用的授权o选项。请参阅