Использование проверки подлинности с помощью формы и входа в Azure AD в одном приложении mvc

Я использую приложение mvc с опцией входа в Azure AD (аутентификация OpenId). Мне нужно предоставить возможность олицетворения для администраторов. поэтому я решил использовать проверку подлинности с помощью формы для входа в систему с имитацией. теперь моя проблема заключается в том, что включение проверки подлинности с помощью формы в webconfig влияет на вход в Azure AD. после добавления аутентификации формы он будет постоянно показывать перенаправление с следующим URL, http://localhost:9666/members/logon?ReturnUrl=%2fmembers%2flogonusingazure%3freturnUrl%3d%2f&returnUrl=/

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

<authentication mode="Forms">
      <forms loginUrl="~/members/logon" cookieless="UseCookies" name="MvcForumAuth" slidingExpiration="true" timeout="432000" />
    </authentication>

Спасибо, Нагарадж М.


person Nagaraj M    schedule 02.06.2017    source источник
comment
Ознакомьтесь с этим сообщением   -  person Stephane Ehret    schedule 15.04.2021


Ответы (2)


Проверка подлинности с помощью форм - это старая версия платформы проверки подлинности для ASP.NET. Шаблон по умолчанию для ASP.NET MVC в последней версии Visual Studio имеет реализацию ASP.NET Identity Framework.

Вы можете попробовать использовать OWIN CookieAuthentication и удостоверение ASP.NET для обработки локальной проверки подлинности с OpenIdConnect для проверки подлинности AzureAD.

Чтобы использовать удостоверение asp.net, если вы создаете новый проект MVC с использованием индивидуальных учетных записей для аутентификации, вы можете увидеть автоматически сгенерированный код для класса Startup в дополнение к контроллеру учетной записи, который имеет действия входа как для прямой аутентификации, так и для ExternalLogin (сторонний) .

Затем вы можете использовать промежуточное ПО ASP.Net OpenID Connect OWIN для входа пользователей из клиента Azure Active Directory:

  1. установите библиотеку Microsoft.Owin.Security.OpenIdConnect в NuGet.
  2. в классе Startup установите конвейер OpenIdConnect:

    app.UseOpenIdConnectAuthentication(
      new OpenIdConnectAuthenticationOptions
      {
          ClientId = clientId,
          Authority = Authority,
          PostLogoutRedirectUri = postLogoutRedirectUri,
          RedirectUri = postLogoutRedirectUri,
          Notifications = new OpenIdConnectAuthenticationNotifications
          {
              AuthenticationFailed = context =>
              {
                  context.HandleResponse();
                  context.Response.Redirect("/Error?message=" + context.Exception.Message);
                  return Task.FromResult(0);
              }
          }
      });
    

    Теперь вы можете войти в свое приложение с локальной учетной записью и учетными записями в лазурной рекламе как внешний пользователь: введите описание изображения здесь

Кроме того, вам необходимо установить <authentication mode="none" /> в web.config, чтобы позволить OWIN взять на себя процесс аутентификации / авторизации для вашего приложения из IIS.

person Nan Yu    schedule 05.06.2017

Следуя предложению Нан Ю, приведенному выше, иногда приложение пытается выполнить вход в Azure Ad / OpenId, прежде чем перейти на страницу входа в систему идентификации. Я не могу понять, почему, но настройка аутентификации с помощью форм, похоже, работает нормально

<authentication mode="Forms">
      <forms loginUrl="~/Account/Login/" timeout="2880"/>
</authentication>
person Vitor Luiz Rubio    schedule 04.12.2017