vista tutorial net mvc modelo form entre ejemplos ejemplo diferencias controlador asp c# asp.net asp.net-mvc asp.net-mvc-5 claims

tutorial - web forms c# ejemplos



Acceda a los valores de reclamaciĆ³n en el controlador en MVC 5 (2)

He utilizado la autenticación OWIN en mi aplicación.

Login Action

var claims = new List<Claim>(); claims.Add(new Claim(ClaimTypes.Name, result.UserFirstName)); claims.Add(new Claim(ClaimTypes.Sid, result.UserID.ToString())); var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);

Quiero acceder al nombre de usuario y al ID de usuario desde una acción diferente. ¿Cómo puedo acceder a los valores que se agregan en las reclamaciones?

Actualizar lo he intentado

var claims = new List<Claim>(); claims.Add(new Claim(ClaimTypes.Name, result.UserFirstName + " " + result.UserLastName)); claims.Add(new Claim(ClaimTypes.Sid, result.UserIDNumber.ToString())); var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); var authenticationManager = Request.GetOwinContext().Authentication; authenticationManager.SignIn(identity); var claimsPrincipal = new ClaimsPrincipal(identity); Thread.CurrentPrincipal = claimsPrincipal;

Puedo ver los valores dentro de la ventana rápida. Pero a pesar de que no pude acceder al valor. ¿Cómo obtener el valor?


Aquí hay otro ejemplo, con tipos de reclamos personalizados también:

Iniciar sesión:

var claims = new List<Claim> { new Claim(ClaimTypes.Name, user.Name, ClaimValueTypes.String), new Claim(ClaimTypes.Email, user.Email ?? string.Empty, ClaimValueTypes.Email), new Claim(ClaimTypes.PrimarySid, user.Id.ToString(), ClaimValueTypes.Integer), new Claim(CustomClaimTypes.SalesId, user.SalesId.ToString(), ClaimValueTypes.Integer) }; var claimsIdentity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); AuthenticationManager.SignIn(claimsIdentity);

Reclamaciones personalizadas:

public static class CustomClaimTypes { public const string SalesId = "SalesId"; }

Métodos de extensión:

public static class IdentityExtensions { public static int GetSalesId(this IIdentity identity) { ClaimsIdentity claimsIdentity = identity as ClaimsIdentity; Claim claim = claimsIdentity?.FindFirst(CustomClaimTypes.SalesId); if (claim == null) return 0; return int.Parse(claim.Value); } public static string GetName(this IIdentity identity) { ClaimsIdentity claimsIdentity = identity as ClaimsIdentity; Claim claim = claimsIdentity?.FindFirst(ClaimTypes.Name); return claim?.Value ?? string.Empty; } }

Entonces se puede acceder de esta manera:

User.Identity.GetSalesId(); User.Identity.GetName();


Thread.CurrentPrincipal configurar su Thread.CurrentPrincipal después del inicio de sesión, es decir,

var claims = new List<Claim>(); claims.Add(new Claim(ClaimTypes.Name, result.UserFirstName)); claims.Add(new Claim(ClaimTypes.Sid, result.UserID.ToString())); var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie); var claimsPrincipal = new ClaimsPrincipal(identity); // Set current principal Thread.CurrentPrincipal = claimsPrincipal;

Entonces lo siguiente recuperará los valores.

//Get the current claims principal var identity = (ClaimsPrincipal)Thread.CurrentPrincipal; // Get the claims values var name = identity.Claims.Where(c => c.Type == ClaimTypes.Name) .Select(c => c.Value).SingleOrDefault(); var sid = identity.Claims.Where(c => c.Type == ClaimTypes.Sid) .Select(c => c.Value).SingleOrDefault();