/// <summary> /// Autentica la identidad del usuario y obtiene sus datos. /// </summary> /// <param name="loginClaims">Diccionario con los elementos probatorios de la identidad del usuario</param> /// <param name="setContext">Especifica si se debe crear el contexto de seguridad (Principal)</param> /// <returns>Identidad del usuario</returns> public static NucleoIdentity LogIn(Dictionary <string, object> loginClaims, bool setContext) { try { ClaimDictionary userClaims; userClaims = AuthenticationProvider.Authenticate(new ClaimDictionary(loginClaims)); Alemana.Nucleo.Shared.DataHolder.SetValue(Nucleo.Shared.DataHolderKeys.Roles, userClaims["Roles"]); var identity = new NucleoIdentity(userClaims); if ((setContext && identity.IsAuthenticated)) { SetPrincipalToContext(new NucleoPrincipal(identity)); } return(identity); } catch (Exception ex) { ExceptionPolicy.HandleException(ex, Defaults.DefaultExceptionPolicy); throw ex; } }
/// <summary> /// Constructor con la identidad del usuario /// </summary> /// <param name="identity">Identidad del Usuario</param> public NucleoPrincipal(NucleoIdentity identity) { NucleoIdentity = identity; var principalClaims = new Dictionary <string, object>(identity.Claims); principalClaims["SessionStartTime"] = DateTime.UtcNow; principalClaims["LastAccessTime"] = DateTime.Parse(principalClaims["SessionStartTime"].ToString()); Ticket = CryptoHelper.Encrypt(principalClaims.ToJSON()); }
/// <summary> /// Constructor con el ticket de la cookie /// </summary> /// <param name="ticket">ticket de la cookie encriptada</param> public NucleoPrincipal(string ticket) { var principalClaims = CryptoHelper.Decrypt(ticket).FromJSON <Dictionary <string, object> >(); SessionStartTime = DateTime.Parse(principalClaims["SessionStartTime"].ToString()); LastAccessTime = DateTime.UtcNow; principalClaims["LastAccessTime"] = LastAccessTime; Ticket = CryptoHelper.Encrypt(principalClaims.ToString()); principalClaims.Remove("SessionStartTime"); principalClaims.Remove("LastAccessTime"); NucleoIdentity = new NucleoIdentity(new ClaimDictionary(principalClaims)); }
/// <summary> /// Realiza el cambio de contraseña para una identidad de usuario autenticada. /// </summary> /// <param name="identity">Identidad del usuario autenticada correctamente (IsAuthenticated = true)</param> /// <param name="password">Nueva contraseña</param> /// <returns>Resultado del proceso de cambio de contraseña</returns> public static ChangePasswordResult ChangeUserPassword(NucleoIdentity identity, string newPassword) { if (!identity.IsAuthenticated) { throw new NucleoCommonException("Se ha intentado cambiar la contraseña del usuario [{0}] pero la identidad asociada no se encuentra autenticada (IsAuthenticated == false)", identity.Name); } try { return(SecurityManager.PasswordProvider.Change(identity, newPassword)); } catch (Exception ex) { ExceptionPolicy.HandleException(ex, Defaults.DefaultExceptionPolicy); throw ex; } }
/// <summary> /// Verifica si la identidad se encuentra asociada a un rol específico. /// </summary> /// <param name="identity">Identidad del usuario</param> /// <param name="role">Rol asociado</param> /// <returns>Verdadero si la identidad se encuentra asociada al rol</returns> public static bool IsUserInRole(NucleoIdentity identity, string role) { if (!identity.IsAuthenticated) { return(false); } var permissions = PermissionsCache.GetOrAdd <IEnumerable <string> >(identity.Name, () => { return(SecurityManager.AuthorizationProvider.GetPermissions(identity.Rut).ToList()); }); if (permissions == null) { return(false); } return(permissions.Contains(role)); }