Перенаправить пользователя на настраиваемую страницу входа при использовании Azure AD

Я использую следующий пример кода, чтобы подключить вход Azure AD в свое приложение (https://github.com/AzureADSamples/WebApp-OpenIDConnect-DotNet).

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

Пользователь всегда перенаправляется на страницу входа в Microsoft для Azure AD, а не на вашу собственную пользовательскую страницу, или это какой-то параметр, который я пропустил?

Я изменил предоставленный код в FilterConfig.cs, чтобы включить атрибут авторизации фильтра:

filters.Add(new AuthorizeAttribute());

Я также добавил следующее в web.config, но безрезультатно:

<authorization>
<allow users="?" />
</authorization>

В файле Startup.Auth.cs я не вижу каких-либо изменений, которые можно было бы внести в app.UseOpenIdConnectAuthentication, чтобы позволить мне настроить общую страницу входа в систему, как я могу сделать с аутентификацией на основе файлов cookie.


person choms79    schedule 22.10.2014    source источник


Ответы (3)


После некоторого повторного просмотра кода я нашел решение своей проблемы.

В пределах Startup.Auth.cs:

app.UseCookieAuthentication(new CookieAuthenticationOptions {
   LoginPath = new PathString("/Account/Login")
});

app.UseOpenIdConnectAuthentication(
   new OpenIdConnectAuthenticationOptions {
      ClientId = clientId,
      Authority = authority,
      PostLogoutRedirectUri = postLogoutRedirectUri,
      AuthenticationMode = AuthenticationMode.Passive
});

Это включение строки AuthenticationMode = AuthenticationMode.Passive, которая, по-видимому, мешает OpenIdConnectAuth выполнять автоматическое перенаправление 302 на страницы входа в AAD.

person choms79    schedule 23.10.2014
comment
@BenV, объединив ваше предложение об использовании AAD premium для пользовательского экрана входа в AAD с вышеизложенным, я думаю, что это гораздо более предпочтительный подход к несколько настраиваемому процессу входа в систему. - person choms79; 23.10.2014
comment
Если бы я мог проголосовать за этот ответ более одного раза, я бы это сделал. - person Kevin R.; 21.12.2016
comment
Кевин, я тоже проголосовал за тебя :) это решило мою проблему. спасибо @Choms79 - person Cozdemir; 06.01.2020
comment
Исправил это и для меня. Спасибо! - person Adam Benson; 11.11.2020

Предполагая, что Azure AD является вашим поставщиком удостоверений, вы можете настроить страницу входа, но для этого необходимо использовать Azure AD Premium.

person BenV    schedule 22.10.2014
comment
Спасибо за это @BenV, я надеялся, что смогу полностью контролировать свое приложение и отображать пользовательскую страницу входа всякий раз, когда требуется авторизация, например, http://‹my domain›/Account/Login. Я предполагаю, что вы не можете, потому что это противоречит цели AD Premium. - person choms79; 23.10.2014
comment
Идея заключается в том, что вместо того, чтобы брать на себя ответственность за безопасный сбор и передачу учетных данных пользователей, вы можете делегировать эту ответственность AAD. - person BenV; 23.10.2014

Возможно, это то, что я ищу...

Этот пример позволяет пользователю входить в Azure AD без необходимости использовать собственные входы Azure AD на основе браузера.

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

==== Изменить ==== Это не тот путь, по которому я хочу идти, поскольку я буду убирать многое из того, что AAD предлагает из коробки. По сути, я хотел бы сохранить потоки управления AAD, но я просто хочу иметь возможность контролировать, на какую страницу попадает пользователь, когда пользователь не вошел в систему.

В настоящее время поток: не авторизован -> перенаправление 302 -> вход в AAD.

Я бы хотел: Не авторизован -> Перенаправление 302 -> Требуемая страница для самостоятельного входа -> Нажмите кнопку входа пользователя -> Перенаправление 302 -> Вход в AAD

Это поток, который я не могу понять.

person choms79    schedule 23.10.2014
comment
Это также неправильное использование протокола OAuth (предназначенного для делегированной авторизации) для аутентификации, что некоторые говорят открывает некоторые дыры в безопасности. Но да, это технически возможно, и вы сохраняете полный контроль над UX. - person BenV; 23.10.2014