por example basada autenticacion asp.net owin

asp.net - example - ¿Cómo ignoro la magia del Marco de Identidad y solo uso el middleware de autenticación OWIN para obtener los reclamos que busco?



web api authentication token example (1)

El material de middleware de OWIN para integrar los inicios de sesión de terceros a su aplicación ASP.NET es muy bueno, pero parece que no puedo descifrar cómo arrancarlo del nuevo marco de ID que reemplaza a la API de membresía de mierda. No estoy interesado en persistir las reclamaciones resultantes y la información del usuario en esa persistencia de datos basada en EF, solo quiero la información de reclamaciones para poder aplicarla a mis propias cuentas de usuario en proyectos existentes. No quiero adoptar el nuevo marco de ID solo para aprovechar esto.

He estado buscando el código en CodePlex, pero hay mucha magia estática. ¿Puedes ofrecer alguna sugerencia?


Use el siguiente código para configurar middlewares de seguridad OWIN:

app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = "Application", AuthenticationMode = AuthenticationMode.Passive, LoginPath = new PathString("/Login"), LogoutPath = new PathString("/Logout"), }); app.SetDefaultSignInAsAuthenticationType("External"); app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = "External", AuthenticationMode = AuthenticationMode.Passive, CookieName = CookieAuthenticationDefaults.CookiePrefix + "External", ExpireTimeSpan = TimeSpan.FromMinutes(5), }); app.UseGoogleAuthentication();

El código anterior configura las cookies de aplicación, las cookies externas y los middlewares de inicio de sesión externos de Google. El middleware de inicio de sesión externo convertirá los datos de inicio de sesión del usuario externo como identidad y lo configurará como middleware de cookie externo. En su aplicación, necesita obtener una identidad de cookie externa y convertirla a datos de inicio de sesión externos, luego puede verificarla con su usuario de db.

Aquí hay algunos ejemplos de código.

Iniciar sesión con la cookie de aplicación:

var authentication = System.Web.HttpContext.Current.GetOwinContext().Authentication; var identity = new ClaimsIdentity("Application"); identity.AddClaim(new Claim(ClaimTypes.Name, "<user name>")); authentication.AuthenticationResponseGrant = new AuthenticationResponseGrant(identity, new AuthenticationProperties() { IsPersistent = false });

Obtener la identidad de la cookie de la aplicación:

var identity = System.Web.HttpContext.Current.User.Identity as ClaimsIdentity;

Obtener identidad de cookie externa (Google):

var authentication = System.Web.HttpContext.Current.GetOwinContext().Authentication; var result = await authentication.AuthenticateAsync("External"); var externalIdentity = result.Identity;

Extraer datos de inicio de sesión externos de la identidad:

public static ExternalLoginData FromIdentity(ClaimsIdentity identity) { if (identity == null) { return null; } Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier); if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer) || String.IsNullOrEmpty(providerKeyClaim.Value)) { return null; } if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer) { return null; } return new ExternalLoginData { LoginProvider = providerKeyClaim.Issuer, ProviderKey = providerKeyClaim.Value, UserName = identity.FindFirstValue(ClaimTypes.Name) }; }