Easy Auth Implicit Flow с функцией AAD и Azure возвращает несанкционированный - PullRequest
0 голосов
/ 08 апреля 2020

API repro

  • Я создал простое функциональное приложение azure на портале azure и функцию с привязкой http. Функция просто возвращает строку «Привет из защищенного API».

  • Следующие функции платформы я выбрал Аутентификация / Авторизация . Я включил аутентификацию службы приложений. Я выбрал действие, которое необходимо выполнить, когда запрос не аутентифицирован: Войдите в систему с AAD . Выбрал AAD в качестве моего провайдера и настроил в режиме Express (каталог по умолчанию) и выбрал {имя} для нового приложения Active Directory.

  • Я также добавил к адресу политики CORS: http://localhost: 8080 , где запущено мое Vue. js клиентское приложение.

  • После этих операций я зарегистрировал приложение в своем AAD с user_impersonation уже определена область. Приложение AD уже настроило URI перенаправления: https: // {name} .azurewebsites.net / .auth / login / aad / callback, проверило токен Id для неявного предоставления на веб-платформе. Я хотел изменить поддерживаемые типы учетных записей на мультитенантные, но не могу из-за какой-то ошибки.

  • В разделе Expose Api я изменил Uri идентификатора приложения с https: // {name} .azurewebsites. net to api: // {идентификатор приложения} для выбора поддерживаемых типов клиентов с поддержкой нескольких арендаторов. Там уже определена область user_impersonation.

клиентское репро

  • Я зарегистрировал свое приложение на веб-платформе с перенаправлением URI http://localhost: 8080 / и выберите идентификатор и маркер доступа в разделе «Неявное предоставление». Я выбрал тип учетной записи для нескольких арендаторов.

  • Я добавил разрешение API в свой API (azure функция) api: // {идентификатор приложения API} / user_impersonation

  • Я использую MSAL. JS в моем vue .app. Я сделал всю свою работу там. Получил всплывающее окно, дал мой логин и пароль.

  • Я получил идентификационный токен и токен доступа в своем клиентском приложении vue. js от поставщика удостоверений (AAD).

  • I отправляю запрос в мой API (функция azure) с заголовком авторизации Bearer {access_token}.

Проблема

Мой запрос API не авторизован , Я получил статус 401:

POST https://{azure func name}.azurewebsites.net/api/HttpTrigger1?code={code}== 401 (Unauthorized)

Http-адрес был скопирован с azure портала.

Когда я нажимаю на ссылку, я перенаправлен для входа в систему и затем перенаправлен на azure функцию с моим текстом «Hello from secure API» на вкладке brwoser.

Мне кажется, что Easy auth рассматривает мою функцию azure как клиентское приложение, хочу ли я, чтобы она была промежуточным программным обеспечением APi для моего vue. js приложение Мой Azure API функции должен только получать и проверять токены доступа.

Пробовал

Я также пытался отправить запрос от почтальона с токеном, но также получил неавторизованный.

Я исследовал токен, и он кажется правильным:

"aud": "api://{Azure function App Id (id in AAD)}",
"iss": "https://sts.windows.net/{tenant id}/",
"appid": "{registered vue js client app id (id in AAD)}",

1 Ответ

0 голосов
/ 09 апреля 2020

Чтобы решить проблему, мне пришлось go перейти в раздел «Аутентификация / Авторизация» в функциях платформы приложения Azure Function. Под провайдером аутентификации выберите AAD -> расширенный и добавьте разрешенную аудиторию токена: api: // {Azure Идентификатор приложения функции AD}.

Проблема заключалась в том, что мой токен был предназначен для другой аудитории: https://{func name}.azurewebsites.net. Это произошло из-за изменения моего идентификатора приложения AF AD:

"В разделе Expose Api я изменил Uri идентификатора приложения с https: // {name} .azurewebsites. net на api: // { app id} для выбора поддерживаемых типов клиентов с несколькими арендаторами. Уже определена область действия user_impersonation. "

Эта операция также изменила имена областей.

...