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