Можно ли анонимно вызвать приложение API, и оно автоматически перенаправит браузер на страницу входа в AD?

Во время недавнего роуд-шоу Microsoft Cloud в Лондоне, в ходе одного из переговоров о службе приложений стало известно об использовании AAD B2C для аутентификации.

В настоящее время можно добавить Azure AD в качестве аутентификации для приложения API:

введите здесь описание изображения

Вызов этого приложения API из веб-приложения на основе браузера без заголовка авторизации приводит к перенаправлению 302, сразу за которым следует ответ 401.

На облачном мероприятии было упомянуто, что можно было бы вызвать приложение API анонимно из веб-приложения, и чтобы служба приложений Azure обрабатывала перенаправление на страницу входа в AAD, получала токен при успешном входе в систему, а затем передавала вызов. в приложение API и верните данные.

Однако я изо всех сил пытаюсь понять, как этого можно достичь без какой-либо ответственности вызывающего веб-приложения за обработку перенаправления. Обычно вы обрабатываете ответ 401 от API, получая токен-носитель через AAD на стороне клиента и отправляя его в качестве заголовка авторизации с запросом api.

Я видел множество примеров на сайте Azure и других, и все они обрабатывают вход в систему / получение токена в клиентском веб-приложении.

Это вообще возможно?


person Declan McNulty    schedule 09.03.2016    source источник
comment
Привет, Деклан, не могли бы вы пояснить свою настройку? Как называется ваш веб-API? Вызывается ли он браузером или каким-то внутренним кодом в вашем веб-приложении?   -  person Chris Gillum    schedule 09.03.2016
comment
У меня есть приложение API в Azure, которое я импортировал в систему управления API. Я вызываю uri управления API для api (который выглядит как MyApiManagement.azure-api.net/MyApi) из C # WebClient в веб-приложении. Я получаю ответ перенаправления 302, в котором API перенаправляет на страницу входа в AAD, но как мне оттуда действовать? Спасибо   -  person Declan McNulty    schedule 09.03.2016
comment
Я не понимаю, как это возможно. Я думаю, что ответ перенаправления от вашего WebClient должен быть вручную передан обратно клиенту, используя ответ от вашего контроллера MVC.   -  person Darrel Miller    schedule 10.03.2016


Ответы (1)


ОБНОВЛЕНИЕ. Я только что понял (как указал @ Darrel-Miller, что вы действительно не хотите позволять пользователю вводить учетные данные.

Единственное, что мне до сих пор неясно, - это где вы хотите предоставить учетные данные для AAD? Что именно вы хотели бы достичь.

Более того, зачем вам использовать AAD, если там вообще нет взаимодействия с пользователем. Если все, что вам нужно, это безопасное соединение, вы можете просто использовать стандартный ключ приложения для веб-API без включения AAD. И это довольно просто, просто добавьте MS_ApplicationKey в свой заголовок, и все готово.

Как вы описали в своем комментарии, у вас есть веб-клиент, который пытается выполнять запросы и получает 302, поэтому в моем исходном ответе было указано, что вы должны использовать ADAL. Но теперь, когда я углубился в то, что вы хотите, вероятно, вы захотите использовать KurveJS: https://github.com/MicrosoftDX/kurvejs

И у него есть модель приложения AAD v2 с Active Directoy B2C.

Это упрощает добавление сторонних поставщиков удостоверений, таких как Facebook, и возможности регистрации / входа / редактирования профиля с использованием политик AD B2C.

Подробнее об этом можно прочитать здесь: https://github.com/MicrosoftDX/kurvejs/blob/master/docs/B2C/intro.md


Вы имеете в виду это ?? https://msdn.microsoft.com/en-us/magazine/dn463788.aspx

Просто используйте пакет ADAL nuget для обработки вызова ...

Вы можете прочитать это в посте:

Как только выполнение достигает вызова AcquireToken, вы получите диалоговое окно аутентификации, показанное на рисунке 8. ADAL позаботится о контакте с правильной конечной точкой и предоставит возможность аутентификации, предоставляемую сервером, во всплывающем диалоговом окне, не требуя от вас напишите любой код пользовательского интерфейса.

Надеюсь, это сработает для вас!

person Bruno Medina    schedule 09.03.2016
comment
OP пытается вызвать API из веб-приложения на сервере. Открывать диалог там, вероятно, не лучшая идея. - person Darrel Miller; 10.03.2016