Estoy creando un sitio web ASP.NET MVC 5 con Asp.net Identity (OWIN) y quiero admitir tanto la autenticación tradicional de nombre de usuario/contraseña como la autenticación contra Azure Active Directory. Esta aplicación no necesita autenticarse con ID de Microsoft (ID en vivo), Facebook, Twitter o cualquiera de los otros proveedores externos. La pregunta SO más cercana que encontré es esta: Cómo hacer tanto el inicio de sesión único de Azure Active Directory como las autenticaciones de formularios en ASP.NET MVC
Miré las muestras que se crean cuando crea un proyecto usando la opción "Cuentas de usuario individuales", así como la opción "Cuentas de trabajo y escuela" en VS 2015. Tengo autenticación que funciona bien individualmente; solo cuando trato de combinarlos me encuentro con problemas.
En mi archivo Startup_Auth.cs, estoy configurando OWIN de esta manera:
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); } } } ); }Esta configuración funciona para la autenticación de contraseña, pero no funciona para la autenticación de AAD. Para habilitar la autenticación AAD, necesito comentar la línea que establece el Tipo de autenticación
AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,O simplemente establezca CookieAuthentication sin valores.
app.UseCookieAuthentication(new CookieAuthenticationOptions { });Supongo que hay un enfoque relativamente simple para esto y agradecería algunas ideas sobre dónde comenzar a buscar.
Recientemente, Damian Edwards, del equipo de ASP.NET, abrió el código abierto de su sitio web comunitario en github . Están usando Azure AD, así que espero que ayude en la dirección correcta, lamentablemente no tengo experiencia con Azure AD.
Aquí también está el video de YouTube del standup donde hablan de ello, creo que hay algunos consejos y quizás sugerencias que podrías utilizar.
Me doy cuenta de que esta es una vieja pregunta. Potencialmente estoy buscando hacer algo similar, pero probablemente más como la autenticación de identidad de ASP.Net para más de un inquilino de Azure AD. Encontré esto Integración de Azure AD en ASP.NET Core donde esta declaración:
...luego aproveche la notificación OnTokenValidated para implementar su propia lógica de validación del emisor según los arrendatarios que desee admitir (cualquier arrendatario, cuenta de Microsoft + lista específica de Azure AD, solo Azure AD, solo cuenta de Microsoft, etc.)...
me lleva a creer que el código de muestra puede contener la clave para este escenario de autenticación mixta.