我的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响应。
问候
答案 0 :(得分:1)
您的Lambda代理函数是否映射到ANY
HTTP方法类型?如果是这样,它可能正在尝试对飞行前(OPTIONS
)请求执行身份验证。如果是这种情况,请尝试将代理功能专门映射到POST
,GET
等。
答案 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);