public ActionResult <ResponseBase <UsuarioQuery> > VerRolesPorUsuario(string usuario, string idAplicacion)
        {
            ResponseBase <UsuarioQuery> response = new ResponseBase <UsuarioQuery>();

            response.code = 500;

            try
            {
                if (idAplicacion == null)
                {
                    response.data = _rolesService.verRolesPorUsuario(usuario);
                }
                else
                {
                    response.data = _rolesService.verRolesPorUsuario_Aplicacion(usuario, idAplicacion);
                }
            }
            catch (Exception e)
            {
                response.message = e.Message;
            }


            if (response.data == null)
            {
                response.code = 202;
            }
            else
            {
                response.code = 200;
            }

            return(StatusCode(response.code, response));
        }
        public LoginResponse IniciarSesion(CredencialesLogin request)
        {
            LoginResponse response = new LoginResponse();

            response.Autenticacion = false;
            response.Bloqueado     = false;


            try
            {
                Aplicacion app = _ufw.RepositoryQueryAplicacion().Find(new AplicacionSpecification(request.IdAplicacion, true, true)).FirstOrDefault();

                IEnumerable <Claim> claims = null;
                if ((app != null) && (app.Estado == true) && (app.PermiteJWT == true) && (app.FechaExpiracionLlave.Value.CompareTo(DateTime.Now) >= 0) && (app.LlaveSecreta != null))
                {
                    request.Usuario = request.Usuario.Contains("@") ? request.Usuario.Split("@")[0] : request.Usuario;
                    Usuario usuario = _ufw.RepositoryQueryUsuario().Find(new UsuarioSpecification(request.Usuario)).FirstOrDefault();

                    SignInResult result = SignInResult.Failed;

                    if ((usuario != null))
                    {
                        claims = _ufw.RepositorySessionesQueries().getClaims(usuario.UserName, app.IdAplicacion);
                        Claim authClaim = new Claim("", String.Empty);

                        authClaim = claims.Where(c => c.Type == ClaimTypes.AuthenticationMethod).FirstOrDefault();

                        if (authClaim == null)
                        {
                            throw new Exception("El usuario no tiene definido el tipo de Autenticación.");
                        }


                        //Account Service
                        if (authClaim.Value.CompareTo("Usuario y Contraseña") == 0)
                        {
                            result = this._ufw.RepositorySessionesCmd().IniciarSesion(request.IdAplicacion, request.Usuario, request.Contrasena);
                        }
                    }
                    else
                    {
                        throw new Exception("La dupla Usuario/Contraseña es incorrecta.");
                    }


                    if (result.Succeeded)
                    {
                        string algorithm = _ufw.RepositoryQueryAlgoritmo().Find(new AlgoritmoSpecification(app.AlgoritmoDeSeguridad)).FirstOrDefault().Valor;
                        string jwt       = TokenGenerator.GenerateTokenJWT(app.LlaveSecreta, algorithm, claims, app.MinutosDeVida.Value, this.Issuer, app.IdAplicacion);

                        response.TokenJWT = new TokenJWT();
                        response.TokenJWT.IdAplicacion = app.IdAplicacion;
                        response.TokenJWT.Token        = jwt;

                        response.Mensaje = "Usuario Autenticado";

                        var tipoAuth = _ufw.RepositoryQueryTipoAuth().Find(new TipoAuthSpecification(usuario.IdTipoAuth)).FirstOrDefault();

                        response.DatosUsuario                   = new UsuarioQuery();
                        response.DatosUsuario.IdUsuario         = usuario.Id;
                        response.DatosUsuario.Usuario           = usuario.UserName;
                        response.DatosUsuario.Nombres           = usuario.Nombres;
                        response.DatosUsuario.Apellidos         = usuario.Apellidos;
                        response.DatosUsuario.Identificacion    = usuario.Identificacion;
                        response.DatosUsuario.TelefonoMovil     = usuario.PhoneNumber;
                        response.DatosUsuario.Email             = usuario.Email;
                        response.DatosUsuario.IdTipoAuth        = usuario.IdTipoAuth;
                        response.DatosUsuario.TipoAutenticacion = (tipoAuth != null)? tipoAuth.Autenticacion : "";
                        response.DatosUsuario.Organizacion      = usuario.Organizacion;
                        response.DatosUsuario.Cargo             = usuario.Cargo;
                        response.DatosUsuario.Description       = usuario.Description;
                        response.DatosUsuario.EsExterno         = usuario.EsExterno;



                        response.DatosUsuario.Roles = _rolesService.verRolesPorUsuario_Aplicacion(usuario.UserName, app.IdAplicacion).Roles;
                    }
                }
                else
                {
                    response.Mensaje = "Inicio de sesión inválido";
                }
            }
            catch (Exception e)
            {
                _ufw.InsertarLog(new _LogAutenticacionAPI("Error", request.Usuario, "Autenticación API", MethodInfo.GetCurrentMethod().Name, this.ToString(), true, e.Message, e.StackTrace));
                throw e;
            }

            return(response);
        }