相关疑难解决方法(0)

访问API网关时缺少身份验证令牌?

我试图通过AWS API Gateway调用Lambda函数.当我提到身份验证类型为NONE时它工作正常但API变为公共,任何有url的人都可以访问我的API.为了使API调用安全,我使用身份验证类型AWS_IAM并将AmazonAPIGatewayInvokeFullAccess策略附加到我的用户但收到此错误:

{message:"缺少身份验证令牌"}

我不知道我在这里失踪了什么.

amazon-web-services aws-api-gateway

43
推荐指数
11
解决办法
6万
查看次数

从S3上的静态站点进行POST时,AWS API Gateway端点会出现CORS错误

我创建了一个带有Serverless(serverless.com)的API端点,我通过API Gateway公开了它.虽然我已经启用了CORS,但我收到了以下错误

XMLHttpRequest无法加载 https://xxxxxxxxx.execute-api.us-west-2.amazonaws.com/development/signup.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许访问来源' http://yyyyyyyy.com.s3-website-us-east-1.amazonaws.com '.

端点的AWS API Gateway设置

尽管我已经设置了origin标题,但是当我使用Postman发出请求时,我没有收到任何错误.我该如何解决这个问题?

amazon-s3 cors aws-api-gateway

16
推荐指数
3
解决办法
2万
查看次数

适用于OPTIONS的AWS API Gateway CORS,POST失败

我已经查看过关于SO的其他相关问题,但这似乎有所不同.事实上,我的问题与问题非常相似,只是我没有400状态问题.

设置:

  • lambda函数通过API网关
  • 授权:无,API KEY必需:false
  • 部署到阶段:测试

  • 1个资源,1个集成lambda的POST方法.

  • 直接调用POST端点例如使用curl总是返回200(有/无负载,有效负载等) - 这与引用的问题不同.

我已经使用了"启用CORS"选项 - 我尝试在资源和POST请求(以及之后部署API)上应用此选项.

在API GW中,我可以看到Access-Control-Allow-Origin在POST方法 - 方法响应区域下的200个响应标题中列出.

结果:从Chrome中的客户端代码调用端点,OPTIONS通过但由于缺少Access-Control-Allow-Origin标头POST失败.

在卷曲:OPTIONS调用

curl -X OPTIONS -H "Access-Control-Request-Method: POST" \
     -H "Access-Control-Request-Headers: Content-Type" \
     -H "Origin: http://example.com" --verbose <endpoint>
Run Code Online (Sandbox Code Playgroud)

回应是:

< HTTP/1.1 200 OK
< Content-Type: application/json
...
< Access-Control-Allow-Headers: Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
< Access-Control-Allow-Methods: POST,OPTIONS
< Access-Control-Allow-Origin: *
...
Run Code Online (Sandbox Code Playgroud)

但是使用POST:

curl -X POST -d '{}' -H "Content-Type: application/json" \
     -H "Origin: http://example.com" --verbose <endpoint>
Run Code Online (Sandbox Code Playgroud)

它返回:

< HTTP/1.1 200 OK …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services cors aws-lambda aws-api-gateway

7
推荐指数
1
解决办法
9490
查看次数

AWS API Gateway + AWS Lambda中的CORS

我正在尝试使用AWS Lambda和API Gateway设置POST lambda函数.这个POST应该可以使用Javascript从现代浏览器调用,所以很自然地,我需要为此启用CORS.不幸的是,无论我做什么,服务器都会在Firefox中返回400错误.我在Gateway的POST功能上启用了CORS,并设置了一个包含所有必需头的OPTIONS功能,但我仍然得到:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://ua1c36to9i.execute-api.ap-southeast-2.amazonaws.com/beta. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

它告诉我,我没有收到Access-Control-Allow-Origin标题,我可以通过查看"网络"标签中的响应来确认:

Content-Length: 181
Content-Type: application/json
Date: Sun, 23 Apr 2017 03:39:10 GMT
Via: 1.1 d0d3075c33572544a6859ec75d2258a1.cloudfront.net (CloudFront)
X-Amz-Cf-Id: EEMUjL78Bf1PSwt4E4QGPgTLXSD8sehiUCgy-XA7TC_1cKv3jxs9Rg==
X-Cache: Error from cloudfront
X-Firefox-Spdy: h2
x-amzn-RequestId: 6943b9bd-27d6-11e7-aaae-f36ce836982f
Run Code Online (Sandbox Code Playgroud)

标题X-Cache: Error from cloudfront似乎告诉我Lambda必须返回某种内部服务器错误,并且CORS仅在Gateway上启用HTTP 200请求.实际上,我的OPTIONS预检返回HTTP 200 OK,这表明CORS似乎启用得很好.但我不知道如何用lambda捕获错误并为CORS启用它,所以我不知道我的内部错误可能是什么.

但令我感到奇怪的是,如果我使用test-cors.org测试我的POST功能,它声称我得到了一个HTTP 200 OK.更奇怪的是,如果我复制它生成的确切代码来发出请求并将其放入我本地计算机上的测试HTML页面,我仍然会获得HTTP 400.这是怎么回事?

我的ajax电话:

var myData = JSON.parse(this.result);
console.log(result);
$.ajax({
    type: "POST",
    dataType: "json",
    url: "https://ua1c36to9i.execute-api.ap-southeast-2.amazonaws.com/beta",
    data: myData,
    headers: …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-web-services cors aws-lambda aws-api-gateway

2
推荐指数
1
解决办法
4763
查看次数