#azure-active-directory #azure-api-management #azure-authentication #microsoft-identity-web
Вопрос:
У нас есть простое веб-приложение, и я пытаюсь использовать управление API Azure поверх него. Прямо сейчас я перенаправляю CName нашего продукта веб-приложения на URL-адрес apim.
Наше веб-приложение является сторонним приложением, и оно выполняет проверку подлинности AAD из Microsoft.Identity.Web
пакета nuget и получает ключ доступа, как показано ниже:
string accessToken = tokenAcquisition.GetAccessTokenForUserAsync(new[] { Configuration["Scopes:<product>"] }).GetAwaiter().GetResult();
Прямо сейчас я перенаправляю весь трафик (GET /* и POST /*) с CName на URL apim
Без использования APIM наши сетевые вызовы (успешные) выглядят следующим образом: Без APIM
Однако при добавлении уровня APIM наши сетевые вызовы выглядят следующим образом: С APIM
Каким-то образом /signin-oidc
запрос перенаправляет вызов login.microsoftonline.com/..
вместо авторизации запроса и перенаправления обратно в корневой каталог (путь: '/'
) страницы вызывающего абонента.
Мы получаем повторяющийся цикл:
apim-url => login.microsoftonline.com/consumers/.. => login.live.com/... => apim-url/signin-oidc => login.microsoftonline.com/consumers => ...
Я не уверен, работает ли перенаправление неправильно или аутентификация не работает.
Любые зацепки были бы полезны,
Спасибо,
Маниша
Ответ №1:
Я не знаю, почему у вас такое поведение, но часто цикл аутентификации происходит из-за плохого перенаправления.
Вы используете перенаправление dns, поэтому вам следует добавить в AAD URL-адрес перенаправления 2 на портале :
apim-url/подпись-oidc и [домен пользователя]/подпись-oidc
Комментарии:
1. Спасибо за предложение, но у нас уже есть это, без этого мы получили ошибку «Неверный uri перенаправления»
2. Извините за это, вы использовали CDN или какой-то прокси-сервер ?
3. Нет, мы не используем какой-либо прокси-сервер, просто позволяя apim перенаправлять на наш размещенный URL.
4. Последнее, о чем я мог думать, — это ошибка секретного ключа или неправильная конфигурация в AAD для приложения…
5. Ваша архитектура выглядела так же, как эта ? : docs.microsoft.com/en-us/azure/architecture/…
Ответ №2:
Я просто пробую это с нуля :
- Создайте службу управления API azure
- Добавьте шлюз-давайте назовем его «мой шлюз».
- Добавьте Api (я выбираю функцию Azure с аутентификацией AAD), назовите ее «my-api».
- В настройках API (API => мой-api =>> Настройки) Я удаляю запрошенную подписку (только для теста) и не проверяю Наличие авторизации пользователя (потому что в моем тесте за это отвечает моя функция, а не шлюз).
Теперь я тестирую в своем Http-клиенте (для меня это клиент Advanced REST) вызов шлюза :
https://my-gateway.azure-api.net/my-api
В заголовке я добавляю : Авторизация : Предъявитель [xxxx — Токен безопасности]
Если все настройки AAD в порядке , это будет работать нормально (для меня это работает).
Если нет, то ваш pb находится в конфигурации AAD вашего api (или в какой-то плохой реализации AuthO/OpenID внутри вашего кода API).
Если возможно, поделитесь с нами частью вашего кода для обеспечения безопасности в вашем API.
Комментарии:
1. Если ничего из этого не сработало, попробуйте использовать политику между шлюзом и вашим api : docs.microsoft.com/en-us/azure/api-management/policies/…