Я использую Amplify, и мой API-шлюз проксирует Lambda. Я включил CORS на моем /{proxy+}
и развернул API. В моей лямбда-функции я устанавливаю соответствующий заголовок в своей тривиальной функции:
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 находится за ресурсом шлюза API, который аутентифицируется через Cognito.
Когда я вызываю свой API с помощью Amplify:
let myInit = {
headers: {
Authorization: `Bearer ${(await Auth.currentSession())
.getIdToken()
.getJwtToken()}`
}
};
API.get("adminapi", "/admin", myInit) ...
Я получаю ужасный заголовок CORS 'Access-Control-Allow-Origin', отсутствующий в моем GET
запросе:
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, он работает нормально, но в моем веб-приложении с использованием токена-носителя он не работает, как указано выше.