Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Aws lambda 无服务器aws Cors设置_Aws Lambda_Serverless Framework_Serverless_Aws Serverless - Fatal编程技术网

Aws lambda 无服务器aws Cors设置

Aws lambda 无服务器aws Cors设置,aws-lambda,serverless-framework,serverless,aws-serverless,Aws Lambda,Serverless Framework,Serverless,Aws Serverless,我正在构建无服务器应用程序,希望限制只有一个url可以访问服务器 我在serverless.yml上尝试了两种方法 login: handler: login.login events: - http: path: login method: post cors: origins: - 'https://admin.test.com'

我正在构建无服务器应用程序,希望限制只有一个url可以访问服务器

我在serverless.yml上尝试了两种方法

login:
    handler: login.login
    events:
      - http:
          path: login
          method: post
          cors:
            origins:
              - 'https://admin.test.com'
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
              - X-Amz-User-Agent
              - Startlower
              - Text
              - Access-Control-Allow-Headers
              - Access-Control-Allow-Origin

在登录功能上

headers: {
    "Access-Control-Allow-Credentials": true,
    "Access-Control-Allow-Origin" : "https://admin.test.com",
    "Content-Type": "application/json",
},
headers: {
    "Access-Control-Allow-Credentials": true,
    "Access-Control-Allow-Origin" : "https://admin.test.com",
    "Content-Type": "application/json",
},
但它对公众开放。任何拥有无服务器url的人都可以访问并查看json输出


我应该更改哪个部分?

访问控制允许源站标题与(许多类型的)跨源AJAX请求相关。它不是一种通用的访问控制机制

所谓AJAX(有点过时了?),我本质上是指通过javascript从浏览器发出的请求

,但整个故事值得一读,至少两遍

因此,此标头可以防止跨源AJAX请求,因为所有浏览器都尊重它。它对“常规”请求(即,将URL粘贴到浏览器或邮递员)不起任何作用


为了只允许来自一个IP的任何类型的请求,您可以检查lambda代码中的
来源
参考
头,但是头可以被伪造。可能是一个更健壮的解决方案。

Access Control Allow Origin头与(许多类型的)跨源AJAX请求相关。它不是一种通用的访问控制机制

所谓AJAX(有点过时了?),我本质上是指通过javascript从浏览器发出的请求

,但整个故事值得一读,至少两遍

因此,此标头可以防止跨源AJAX请求,因为所有浏览器都尊重它。它对“常规”请求(即,将URL粘贴到浏览器或邮递员)不起任何作用


为了只允许来自一个IP的任何类型的请求,您可以检查lambda代码中的
来源
参考
头,但是头可以被伪造。可能是一个更强大的解决方案。

CORS不会阻止您的功能被世界访问,它只是意味着一个信誉良好的浏览器将拒绝在域不匹配的情况下对服务进行异步调用

您可能要做的是创建一个,这可以设置为授权您登录的管理员

functions:
  customauth:
    handler: customauth/index.handler

  admin-thing:
    handler: admin/dosomething.handler
    events:
      - http:
          path: admin/dosomething
          method: post
          authorizer:   
            name: customauth
            resultTtlInSeconds: 0
            identitySource: method.request.header.Authorization
            identityValidationExpression: ^Bearer [-0-9a-zA-z\.]*$          
          cors:
            origins:
              - 'https://admin.test.com'
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
            allowCredentials: true

您也可以使用referer头来实现这一点,尽管没有那么安全。

CORS不会阻止您的功能被世界访问,它只是意味着,如果域的不匹配,信誉良好的浏览器将拒绝接受异步调用服务

您可能要做的是创建一个,这可以设置为授权您登录的管理员

functions:
  customauth:
    handler: customauth/index.handler

  admin-thing:
    handler: admin/dosomething.handler
    events:
      - http:
          path: admin/dosomething
          method: post
          authorizer:   
            name: customauth
            resultTtlInSeconds: 0
            identitySource: method.request.header.Authorization
            identityValidationExpression: ^Bearer [-0-9a-zA-z\.]*$          
          cors:
            origins:
              - 'https://admin.test.com'
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
            allowCredentials: true

您也可以使用referer头执行此操作,但不太安全。

在无服务器的官方文档中,APIGateway配置仅接受
来源:“值”
。我认为您可以使用“正确”设置和组合响应头重试:

login:
    handler: login.login
    events:
      - http:
          path: login
          method: post
          cors:
            origin: 'https://admin.test.com'
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
              - X-Amz-User-Agent
              - Startlower
              - Text
              - Access-Control-Allow-Headers
              - Access-Control-Allow-Origin
在登录功能中(与您的功能相同)


在无服务器的官方文档中,APIGateway配置仅接受
origin:'value'
。我认为您可以使用“正确”设置和组合响应头重试:

login:
    handler: login.login
    events:
      - http:
          path: login
          method: post
          cors:
            origin: 'https://admin.test.com'
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
              - X-Amz-User-Agent
              - Startlower
              - Text
              - Access-Control-Allow-Headers
              - Access-Control-Allow-Origin
在登录功能中(与您的功能相同)