Служба приложений Azure - ошибка CORS OAUTH2 при доступе к PWA webmanifest.json - PullRequest
0 голосов
/ 03 сентября 2018

Я бы хотел добавить функциональность PWA в мою службу приложений. Это написано в C # ASP.NET. Однако Chrome не может получить доступ к манифесту, а Edge даже не получает значок (это может быть отдельной проблемой). Другие браузеры для настольных компьютеров, по-видимому, еще не поддерживают PWA.

Chrome - единственный браузер, который запрашивает манифест. Вот сообщение об ошибке в моей консоли:

Failed to load https://login.windows.net/b79fd714-9c54-449d-b377-3b59deb2d3b6/oauth2/authorize?response_type=code+id_token&redirect_uri=https%3A%%{myappname}.azurewebsites.net%.auth%2Flogin%2Faad%2Fcallback&client_id=67bedd5c-5478-44ec-ba13-85061c71114b&scope=openid+profile+email&response_mode=form_post&nonce=df52b6dc64dd4c3393957675f365ae93_20180903064438&state=redir%3D%252Fwebmanifest.json: Redirect from 'https://login.windows.net/b79fd714-9c54-449d-b377-3b59deb2d3b6/oauth2/authorize?response_type=code+id_token&redirect_uri=https%3A%%{myappname}.azurewebsites.net%.auth%2Flogin%2Faad%2Fcallback&client_id=67bedd5c-5478-44ec-ba13-85061c71114b&scope=openid+profile+email&response_mode=form_post&nonce=df52b6dc64dd4c3393957675f365ae93_20180903064438&state=redir%3D%252Fwebmanifest.json' to 'https://login.microsoftonline.com/b79fd714-9c54-449d-b377-3b59deb2d3b6/oauth2/authorize?response_type=code+id_token&redirect_uri=https%3A%%{myappname}.azurewebsites.net%.auth%2Flogin%2Faad%2Fcallback&client_id=67bedd5c-5478-44ec-ba13-85061c71114b&scope=openid+profile+email&response_mode=form_post&nonce=df52b6dc64dd4c3393957675f365ae93_20180903064438&state=redir%3D%252Fwebmanifest.json' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://{myappname}.azurewebsites.net' is therefore not allowed access.

Может показаться, что моя аутентификация AAD, которую я включил в службе приложений, мешает манифесту моего браузера.

Я понимаю, что для быстрого решения этой проблемы Microsoft придется добавить это приложение в свои CORS. Это, конечно, не то, что я ожидал бы случиться. Однако мне нужен альтернативный способ, чтобы браузер мог получить доступ к манифесту.

Я добавил необходимые mimeMaps в мой web.config.

<staticContent>
  <remove fileExtension=".json" />
  <mimeMap fileExtension=".json" mimeType="application/json" />
  <remove fileExtension=".webmanifest" />
  <mimeMap fileExtension=".webmanifest" mimeType="application/json" />
</staticContent>

Вот верхняя часть моего Head:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf />
    <meta name="viewport" content="width=device-width, initial-scale=>

    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="manifest" href="/webmanifest.json">
    <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
    <meta name="apple-mobile-web-app-title" content="{myappname}">
    <meta name="application-name" content="{myappname}">
    <meta name="msapplication-TileColor" content="#da532c">
    <meta name="theme-color" content="#ffffff">


    <title>@ViewBag.Title - {myappname}</title>

Если бы я использовал какой-то AJAX-запрос, я бы следовал одному из учебных пособий в Интернете. Тем не менее, насколько я знаю, я практически не контролирую заголовок.

Примечание. Все вхождения имени моего приложения были заменены на {myappname}. Я действительно надеюсь, что эти токены временные ...


В приведенной выше учебной ссылке есть соответствующий блок текста, который объясняет мою проблему лучше, чем сам мой вопрос:

В типичном сценарии после аутентификации пользователя в Azure AD для входа в приложение служба приложений Azure устанавливает файл cookie с именем «AppServiceAuthSession» для этого аутентифицированного сеанса с клиентом браузер. Веб-приложение может использовать запрос XMLHttpRequest / AJAX для различные функциональные возможности приложения и запрос, отправляемый в Azure Служба приложений также будет содержать файл cookie AppServiceAuthSession. когда этот файл cookie отсутствует в запросе, служба приложений Azure перенаправить запрос в Azure AD для входа в систему. Это перенаправление вызывает запрос AJAX, чтобы стать запросом CORS, так как домен назначения изменения и Azure AD по умолчанию не разрешает перекрестный запрос источника.

В моем случае браузер отправляет запрос на манифест, который не содержит необходимый заголовок.

1 Ответ

0 голосов
/ 04 сентября 2018

Я здесь просто так, но вы можете попробовать использовать атрибут crossOrigin в вашей ссылке на манифест, например:

 <link rel="manifest" href="/webmanifest.json" crossOrigin="use-credentials">

Вот некоторые ссылки, которые могут быть полезны. Согласно первой странице, учетные данные пользователя не передаются по умолчанию при запросе manifest.json:

Пожалуйста, дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...