具有身份验证Angular2的CORS AWS API网关

时间:2017-04-27 10:29:29

标签: angular amazon-web-services cors aws-lambda

我的AWS API-Gateway配置为Lambda代理。在Lambda中,我添加了以下标题:

'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key'

首先,everythink可以正常使用它。现在我添加了一个CognitoUserPool的Authorizer,我得到以下错误:

XMLHttpRequest cannot load https://xxx.eu-west-1.amazonaws.com/xxx/xxx. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 401.

我认为问题是,使用身份验证时,我的Lambdafunction不会被调用,因此没有设置Headers。我使用

从Angular2应用程序调用端点
const headers = new Headers();
headers.append('Authorization', 'authtoken');
http.get('address...', headers);

但由于我认为任何CORS原因,标题未设置/附加到请求。

任何人都知道如何解决这个问题?

P.S。:我尝试了API-Gateway的“启用Cors”功能,但这不起作用。

编辑:我在Gateway中还有一个“OPTIONS”方法,它使用上面的Headers响应。

问候

2 个答案:

答案 0 :(得分:1)

您的Lambda代理函数是否映射到ANY HTTP方法类型?如果是这样,它可能正在尝试对飞行前(OPTIONS)请求执行身份验证。如果是这种情况,请尝试将代理功能专门映射到POSTGET等。

答案 1 :(得分:0)

我找到了问题的解决方案。它不是由API-Gateway引起的。问题是这段代码:

const headers = new Headers();
headers.append('Authorization', 'authtoken');
http.get('address...', headers);

" get"需要一个" RequestOptions" -object。它必须是:

const headers = new Headers();
headers.append('Authorization', 'authtoken');
const options = new RequestOptions({headers: headers});
http.get('address...', options);