我正在使用 Amplify,并让我的 API 网关代理到 Lambda。我已经在我的服务器上启用了 CORS/{proxy+}
并部署了 API。在我的 Lambda 函数中,我在我的普通函数中设置了适当的标头:
import json
def handler(event, context):
print("received event:")
print(event)
return {
"statusCode": 200,
"headers": {
"Access-Control-Allow-Credentials": True,
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET",
"Access-Control-Allow-Origin": "*",
},
"body": json.dumps(event),
}
此 Lambda 函数位于通过 Cognito 进行身份验证的 API Gateway 资源后面。
当我使用 Amplify 调用我的 API 时:
let myInit = {
headers: {
Authorization: `Bearer ${(await Auth.currentSession())
.getIdToken()
.getJwtToken()}`
}
};
API.get("adminapi", "/admin", myInit) ...
我的GET
请求中缺少可怕的 CORS 标头“Access-Control-Allow-Origin”:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/admin. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
我看到它在OPTIONS
请求中返回:
我什至在 Postman 中进行了测试以验证标题是否回来了:
我在这里做错了什么?调用似乎没有通过 API 网关。我想知道它是否与身份验证有关。当我使用我的 IAM 凭证从 Postman 进行测试时,它可以正常工作,但是从我的 Web 应用程序使用不记名令牌时,它会像上面一样失败。