Получение ошибки CORS, как показано ниже в браузере Microsoft Edge, при вызове API поиска Azure из моего пользовательского приложения. - PullRequest
0 голосов
/ 17 января 2019

У меня есть веб-приложение, размещенное в Azure, и Azure AD используется для аутентификации, и я могу войти в приложение. Но при вызове службы поиска Azure API я получаю сообщение об ошибке CORS, как показано ниже, только в браузере MS Edge в Chrome и IE работает нормально.

Я проследил за сетью, и ниже мое наблюдение: Когда вызывается API службы поиска Azure, происходит перенаправление на проверку подлинности Azure AD, и выдается ошибка CORS, но это перенаправление не происходит в chrome или IE, поэтому в этих браузерах проблем нет.

Я уже настроил URL своего сайта в Azure AD, и я полагаю, что не могу изменить заголовок ответа AD, как решить эту проблему.

(Примечание: 1. Я добавил URL-адрес CORS в поиске Azure, а также в веб-приложении и во время вызова API поиска. 2. Я не получаю эту ошибку в Chrome или IE)

Сообщение об ошибке: SEC7120: [CORS] Источник 'https://mysiteurl.com' не нашел' https://mysiteurl.com' в заголовке ответа Access-Control-Allow-Origin для ресурса с несколькими источниками в 'https://login.windows.net/ea80952e-a476-42d4-aaf4-5457852b0f7e/oauth2/authorize?response_type=code+id_token&redirect_uri=https%3A%2F%2Fmysiteurl.com%2F.auth%2Flogin%2Faad%2Fcallback&client_id=ca68e724-2c3d-4699-82bc-f8a56efa243a&scope=openid+profile+email&response_mode=form_post&nonce=8c756622bc8f4b02b03adcb41fbab33b_20190108150104&state=redir%3D%252Fapi%252Fsearch'.

Мой метод поиска:

return fetch("/api/search",
            {
                mode: "cors",
                headers: {
                    "api-key": searchState.config.queryKey,
                    "Access-Control-Allow-Credentials": "true",
                    "access-control-allow-origin": "https://mysiteurl.com",
                    "Content-Type": "application/json",
                    "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"
                },
                method: "POST",
                body: JSON.stringify(postBody)
            });

[См. Изображение ниже, где я вызвал форму API поиска позади]

1 Ответ

0 голосов
/ 11 мая 2019

У меня была та же проблема, и я прошел кропотливый процесс поиска исправления.

Это связано с ошибкой в ​​реализации выборки Edge в версиях 42.17434. Это исправлено в версии 44.17763 (ноябрь 2018 и последующие годы). Вы можете найти свою версию Edge, щелкнув многоточие в правом верхнем углу, нажав «Настройки» и прокрутив вниз.

Суть этой проблемы заключается в том, что, хотя большинство реализаций браузера отправляют параметр по умолчанию credentials: 'same-origin', если параметр учетных данных не указан, Edge этого не делает. Вы должны быть в состоянии исправить это для старых сборок Edge, добавив в запрос опцию учетных данных одного и того же происхождения:

return fetch("/api/search",
            {
                mode: "cors",
                credentials: "same-origin",
                headers: {
                    "api-key": searchState.config.queryKey,
                    "Access-Control-Allow-Credentials": "true",
                    "access-control-allow-origin": "https://mysiteurl.com",
                    "Content-Type": "application/json",
                    "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept"
                },
                method: "POST",
                body: JSON.stringify(postBody)
            });

Билеты, связанные с пограничным выпуском:

...