Пример #1
0
        public UsuarioCidiDto ObtenerUsuarioActivo(string hash)
        {
            GAP.Repository.Cidi.CidiUtil.Usuario usuario;
            Entrada entrada = new Entrada();

            entrada.IdAplicacion = GlobalVars.CiDiIdAplicacion;
            entrada.Contrasenia  = GlobalVars.CiDiPassAplicacion;
            entrada.HashCookie   = hash;
            entrada.TimeStamp    = DateTime.Now.ToString("yyyyMMddHHmmssfff");
            entrada.TokenValue   = Config.ObtenerToken_SHA1(entrada.TimeStamp);
            usuario = Config.LlamarWebAPI <Entrada, GAP.Repository.Cidi.CidiUtil.Usuario>(APICuenta.Usuario.Obtener_Usuario_Aplicacion, entrada);

            UsuarioCidiDto usuarioCidiDto = null;

            if (usuario.Respuesta.Resultado == GlobalVars.CiDi_OK)
            {
                usuarioCidiDto = new UsuarioCidiDto {
                    Nombre   = usuario.Nombre,
                    Apellido = usuario.Apellido,
                    Cuil     = usuario.CUIL,
                    Email    = usuario.Email
                };
            }
            return(usuarioCidiDto);
        }
Пример #2
0
        public ObtenerUsuarioActivoResult Retrieve(ObtenerUsuarioActivoQuery query)
        {
            _obtenerUsuarioActivoResult = new ObtenerUsuarioActivoResult();
            UsuarioCidiDto usuarioCidiDto = _repositryCidi.ObtenerUsuarioActivo(query.Hash);

            _obtenerUsuarioActivoResult.UsuarioDto = usuarioCidiDto;
            return(_obtenerUsuarioActivoResult);
        }
Пример #3
0
        public string GetEmailUsuarioLogueado()
        {
            UsuarioCidiDto usuarioCidi = UsuarioCidiFactory.ValidarUsuarioCidi();

            return(usuarioCidi == null ? String.Empty : usuarioCidi.Email);
        }
Пример #4
0
        /// <summary>
        /// Se controla que el recurso solicitado (a tracés de un end-point) este permitido
        /// para el usuario actual autenticado.
        /// </summary>
        /// <param name="actionContext"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public override Task OnAuthorizationAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
        {
            ContextSingleton.InitBaseUrl();

            var principal = actionContext.RequestContext.Principal as ClaimsPrincipal;

            // Para endpoints con atributo AllowAnonymous evitamos la autenticación.

            bool skipAuthorization =
                actionContext.ActionDescriptor.GetCustomAttributes <AllowAnonymousAttribute>().Any() ||
                actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes <AllowAnonymousAttribute>().Any();

            if (skipAuthorization)
            {
                return(Task.FromResult <object>(null));
            }

            //Validación interna contra token.

            if (!principal.Identity.IsAuthenticated)
            {
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
                return(Task.FromResult <object>(null));
            }

            //Validación de control de cambio de usuario por fuera de la aplicación.

            var userCookie = HttpContext.Current.Request.Cookies["CiDi"];

            if (userCookie == null)
            {
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.NotFound);
            }

            //bool huboCambioDeUsuario = true;

            //UsuarioCidiDto usuarioCidi = UsuarioCidiFactory.ValidarUsuarioCidi();
            //if (usuarioCidi != null)
            //{
            //    LoguinCidiQuery query = new LoguinCidiQuery
            //    {
            //        Cuil = usuarioCidi.Cuil
            //    };

            //    QueryDispatcher _QueryDispatcher = ServiceLocator.Current.GetInstance<QueryDispatcher>();
            //    LoguinCidiQueryResult queryResult = _QueryDispatcher.Dispatch<LoguinCidiQuery, LoguinCidiQueryResult>(query);

            //    if (queryResult.UsuarioDto != null && queryResult.UsuarioDto.Id != null)
            //    {

            //        if (queryResult.UsuarioDto.Cuil == usuarioCidi.Cuil)
            //        {
            //            huboCambioDeUsuario = false;
            //        }
            //    }
            //}

            //if(huboCambioDeUsuario)
            //{
            //    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.NotFound);
            //}

            //Validación de autorización (verifica si el usuario tiene permisos contra URLs)

            if (GlobalVars.AuthenticationByRouteController)
            {
                string endPointAbsolutePath = actionContext.Request.RequestUri.AbsolutePath;
                int    index = endPointAbsolutePath.ToLower().IndexOf("/api/");

                if (index != -1)
                {
                    // Verifico con el listado de end-points disponibles del usuario autenticado.
                    if (principal.Claims.Count() == 0)
                    {
                        actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
                        //actionContext.Response.Headers.Add("X-Error", "gob-permiso-denegado");
                        return(Task.FromResult <object>(null));
                    }
                    string         usuario         = principal.Claims.ToList()[1].ToString();
                    UsuarioCidiDto usuarioLogueado = JsonConvert.DeserializeObject <UsuarioCidiDto>(usuario.Substring(6));

                    string perfilId = "";
                    if (!FuncionalidadesSingleton.Instance.tienePermisos(usuarioLogueado.IdRol.ToString(), endPointAbsolutePath.Substring(4)))
                    {
                        actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
                        //actionContext.Response.Headers.Add("X-Error", "gob-permiso-denegado");
                        return(Task.FromResult <object>(null));
                    }
                }
            }

            return(Task.FromResult <object>(null));
        }
Пример #5
0
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            var allowedOrigin = context.OwinContext.Get <string>("as:clientAllowedOrigin");

            if (allowedOrigin == null)
            {
                allowedOrigin = "*";
            }

            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

            try
            {
                bool registradoEnSalasCuna = false;
                bool logueadoEnCidi        = false;

                UsuarioCidiDto usuarioCidi = UsuarioCidiFactory.ValidarUsuarioCidi();

                if (usuarioCidi != null)
                {
                    logueadoEnCidi = true;
                    LoguinCidiQuery query = new LoguinCidiQuery
                    {
                        Cuil = usuarioCidi.Cuil
                    };

                    QueryDispatcher       _QueryDispatcher = ServiceLocator.Current.GetInstance <QueryDispatcher>();
                    LoguinCidiQueryResult queryResult      = _QueryDispatcher.Dispatch <LoguinCidiQuery, LoguinCidiQueryResult>(query);

                    if (queryResult.UsuarioDto != null && queryResult.UsuarioDto.Id != 0)
                    {
                        var identity = new ClaimsIdentity(context.Options.AuthenticationType);

                        queryResult.UsuarioDto.Apellido = usuarioCidi.Apellido;
                        queryResult.UsuarioDto.Nombre   = usuarioCidi.Nombre;

                        Claim usuarioClimb = new Claim("User", new JavaScriptSerializer().Serialize(queryResult.UsuarioDto));
                        identity.AddClaim(new Claim(ClaimTypes.Name, usuarioCidi.Cuil.ToString()));
                        identity.AddClaim(usuarioClimb);
                        UrlCidiQueryResult urlsCidiResult = _QueryDispatcher.Dispatch <UrlCidiQuery, UrlCidiQueryResult>(null);

                        //**//

                        IDictionary <string, string> data = new Dictionary <string, string>
                        {
                            //{ "Paginas", JsonConvert.SerializeObject(queryResult.FuncionalidadesDto) },
                            { "User", JsonConvert.SerializeObject(queryResult.UsuarioDto) },
                            { "UrlCidi", urlsCidiResult.UrlCidi },
                            { "UrlCerrarSesionCidi", urlsCidiResult.UrlCidiLogout },
                            { "UrlInicarSesionCidi", urlsCidiResult.UrlCidiLogin },
                            { "as:client_id", context.ClientId == null ? string.Empty : context.ClientId }
                        };
                        AuthenticationProperties properties = new AuthenticationProperties(data);

                        Microsoft.Owin.Security.AuthenticationTicket ticket = new Microsoft.Owin.Security.AuthenticationTicket(identity, properties);

                        context.Validated(ticket);

                        registradoEnSalasCuna = true;
                    }
                }

                if (!logueadoEnCidi)
                {
                    //El usuario no está logueado a través de CIDI.
                    context.SetError("NO_AUTENTICADO_EN_CIDI", "");
                    context.Response.ReasonPhrase = "NO_AUTENTICADO_EN_CIDI";
                }
                else if (!registradoEnSalasCuna)
                {
                    //El usuario está logueado a través CIDI pero no se encuentra registrado en Salas Cuna.
                    context.SetError("NO_REGISTRADO_EN_SALAS_CUNA", "");
                    //context.
                    context.Response.ReasonPhrase = "NO_REGISTRADO_EN_SALAS_CUNA";
                }
            }
            catch (Exception e)
            {
                context.SetError("Server error", e.StackTrace);
                context.Rejected();
            }
        }