AWS API-шлюз, выдающий ошибки CORS - PullRequest
0 голосов
/ 18 января 2020

У меня есть API-стек за API-шлюзом. Я использую Connexion, и у меня есть код, куда он добавляет ответ, связанный с CORS.

app = connexion.FlaskApp(__name__, specification_dir='swagger/')
app.add_api('swagger.yaml', arguments={'title': 'MyApp Server'})
app.app.json_encoder = JSONEncoder
CORS(app.app)
app.run()

Я убедился, что cors включен на стороне шлюза API. Я могу запустить все конечные точки API, используя curl. заголовки моих запросов через curl (я добавил -H 'ORIGIN: http://localhost: 8080 ' для имитации поведения браузера).

> POST /dev/current/login HTTP/2
> Host: <host>.execute-api.us-east-1.amazonaws.com
> User-Agent: curl/7.54.0
> Accept: */*
> Origin: http://localhost:8080

Ответ, который я получаю

< HTTP/2 200 
< content-type: application/json
< content-length: 560
< date: Fri, 17 Jan 2020 21:08:20 GMT
< x-amzn-requestid: <>
< access-control-allow-origin: http://localhost:8080
< x-amzn-remapped-content-length: 560
< x-amz-apigw-id: <>
< vary: Origin
...

Я пытаюсь создать веб-приложение. Когда я симулирую подобное поведение, я получаю ошибку CORS.

:path: /dev/current/login
:scheme: https
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
content-length: 342
content-type: application/json;charset=UTF-8
origin: http://localhost:8080
referer: http://localhost:8080/
sec-fetch-mode: cors

response

content-encoding: gzip
content-length: 43
content-type: application/json
date: Fri, 17 Jan 2020 20:31:02 GMT
status: 403
via: 1.1 <CF Host>.cloudfront.net (CloudFront)

x-amzn-errortype: ForbiddenException
x-cache: Error from cloudfront

Что я делаю неправильно.

Мой клиент написан на реаги.

Axios.post('https://<host>.execute-api.us-east-1.amazonaws.com/dev/current/login', {
        headers: {
            'Access-Control-Allow-Origin': '*',
            'X-Api-Key': 'API key',
            'ORIGIN': 'http://localhost:443',

        }
    }).then(v => console.log(v)).catch(c => console.log(c));

1 Ответ

0 голосов
/ 18 января 2020

Похоже, ваш API ожидает источник http://localhost:8080.

Не похоже, что вы отправляете запрос с хоста http://localhost:8080, так как я вижу, что ваш код реакции устанавливает источник на 'ORIGIN': 'http://localhost:443'

Я предлагаю вам установить API cors для разрешения запросов от *, чтобы увидеть, связана ли полученная ошибка с cors (я уверен, что это так). После того, как он заработает, вы можете установить его в указанном домене c.

Надеюсь, это поможет.

...