Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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());
        }
Пример #3
0
        /// <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));
        }
Пример #4
0
        /// <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;
            }
        }
Пример #5
0
        /// <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));
        }