Как связать веб-приложение Angular с функциональным приложением Azure через Azure Active Directory? - PullRequest
0 голосов
/ 17 декабря 2018

В настоящее время я работаю над проектом, в котором мне нужно извлечь данные из конечной точки приложения-функции Azure через клиентское приложение angular 7.Эта конечная точка защищена с помощью Azure Active Directory и была настроена с помощью пользовательского интерфейса регистрации приложения (предварительного просмотра).

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

Шаги, которым я следовал

Я настроил свой угловой клиент, как описано здесь в документации сБиблиотека MSAL.Я использовал конечную точку v2 для настройки подключения моего клиентского приложения.Затем я подключил свою конечную точку приложения функции через регистрацию приложения (предварительный просмотр).Я настроил разрешения и предварительно авторизовал мое веб-приложение, используя его идентификатор клиента - добавил URL перенаправления на http://localhost:4200 - добавил модуль msal к angular следующим образом:

  MsalModule.forRoot({
      clientID: 'my-client-id',
      redirectUri: 'http://localhost:4200',
      consentScopes: [
        'user.read',
        'https://myapp.azurewebsites.net/user_impersonation'
      ]
    }),

Я перепробовал все возможные комбинациинастройки безопасности через пользовательский интерфейс Azure, хотя я и новичок в Azure (работаю с ним в течение 1 недели), я близок к тому, чтобы сказать, что я был везде, не приближаясь.

Каждый раз, когда я запрашиваю свою конечную точку, я получаю 401 Unauthorized с сообщением:

У вас нет разрешения на просмотр этого каталога или страницы.

Я должендобавить я запускаю свой угловой сайт локально

Меня не перенаправляют на страницу авторизации, хотя я настроил это в пользовательском интерфейсе Azure - под защитой активной директории Azure.

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

У меня заканчиваются идеи, у кого-нибудь из вас были проблемы с этим?

РЕДАКТИРОВАТЬ

Код сервера, связанный с авторизацией:

public static async Task<HttpResponseMessage> RunGraphQLService([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, ILogger log)

Как уже упоминалось в комментариях, я отправляю запрос в сервис просто отличноAuthorization: Bearer ey......something 1046 * Снимок экрана почтальона, минус конфиденциальная информация: Postman screenshot

Это все, что ямог бы подумать, чтобы обеспечить.Что касается дополнительной информации.

С уважением, Крис

1 Ответ

0 голосов
/ 17 декабря 2018

Aha!Ваша функция использует AuthorizationLevel.Function - в соответствии с этой документацией вы должны передавать специально сгенерированную функциональную клавишу при вызове.

Из статьи:

Ключ можно передать HTTP-запросу функции Azure в URL-адресе в виде строки запроса кода.Кроме того, он может быть включен в HTTP-заголовок x-functions-key.Передается только значение ключа, а не его имя.

Для уровня авторизации функции требуется ключ для авторизации.И функция, и ключ хоста будут работать.В этом смысле он менее ограничивает уровень авторизации на основе ключей.

Итак, попросите вашего коллегу сгенерировать этот ключ / или дать сгенерированный ключ вам - который вы затем передаете через свой угловой.приложение в заголовке x-functions-key или передайте его в строке запроса, как описано:)

Редактирование и обновление

Подтверждено, что проблема связана сAuthorizationLevel.Function часть кода.Я не могу воспроизвести это поведение с помощью шаблона функций Azure (с использованием среды выполнения 2.0) - я создал функцию из стандартного шаблона с классической функцией Run, обслуживающей запрос, и она работает для меня.В разделе чата, упомянутом Крисом, для смягчения проблемы AuthorizationLevel.Function защита была отключена сейчас - в ожидании дальнейшего изучения.

Просто еще один FYI - Azure в любом случае не рекомендует использовать функциональные клавиши для защиты производства - эти ключи могутбыть услышанным от ваших запросов переднего плана.

от Документация по функциям:

Хотя ключи могут помочь запутать ваши конечные точки HTTP во время разработки, они не предназначеныкак способ обеспечить HTTP-триггер в производстве.Подробнее см. Защита конечной точки HTTP на производстве.

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