Я создаю веб-сайт ASP.NET MVC 5 с использованием Asp.net Identity (OWIN) и хочу поддерживать как традиционную аутентификацию имени пользователя, так и пароль, а также аутентификацию с помощью Azure Active Directory. Это приложение не нуждается в аутентификации против идентификаторов Microsoft (Live ID), Facebook, Twitter или любого другого внешнего поставщика. Ближайшим вопросом SO, который я нашел, является следующий: Как выполнить однократный вход в Azure Active Directory и аутентификацию форм на ASP.NET MVC
Я просмотрел образцы, которые создаются при создании проекта с использованием опции "Индивидуальные учетные записи пользователей", а также опции "Работа и учеба" в VS 2015. У меня есть аутентификация, работающая хорошо индивидуально; это только когда я пытаюсь объединить их, что у меня проблемы.
В моем файле Startup_Auth.cs я настраиваю OWIN следующим образом:
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
//app.UseCookieAuthentication(new CookieAuthenticationOptions { });
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
LoginPath = new PathString("/account/sign-in")
});
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = false,
},
Notifications = new OpenIdConnectAuthenticationNotifications()
{
SecurityTokenValidated = (context) =>
{
return Task.FromResult(0);
},
AuthorizationCodeReceived = (context) =>
{
return Task.FromResult(0);
},
AuthenticationFailed = (context) =>
{
context.OwinContext.Response.Redirect("/Home/Error");
context.HandleResponse(); // Suppress the exception
return Task.FromResult(0);
}
}
}
);
}
Эта конфигурация работает для аутентификации паролей, но не работает для аутентификации AAD. Чтобы включить аутентификацию AAD, мне нужно либо прокомментировать строку, задающую параметр AuthenticationType
AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
Или просто установите CookieAuthentication без значений.
app.UseCookieAuthentication(new CookieAuthenticationOptions { });
Я бы предположил, что существует относительно простой подход к этому, и я бы оценил некоторые идеи о том, где начать искать.