Agregar claims despues de authenticacion ASP Web Api

88 views
Skip to first unread message

Luis Vasquez

unread,
Mar 17, 2016, 2:13:36 PM3/17/16
to AltNet-Hispano
Buena tardes comunidad,

Tengo un pequeño inconvniente con el uso de las claims en asp el cual agradecera de todo corazón cualquier tipo de ayuda, basicamente tengo la siguiente autenticacion   

  public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            string pass = Encrypt_MD5(context.Password);

            var user = await _ctx.tbl_users.Where(a => a.email == context.UserName && a.password == pass).Select(x => new UserModel
            {
                username = x.username,
                email = x.email
            }).FirstOrDefaultAsync();

            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }

            ClaimsIdentity oAuthIdentity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, user.username), }, OAuthDefaults.AuthenticationType);
            ClaimsIdentity cookiesIdentity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, user.username), }, CookieAuthenticationDefaults.AuthenticationType);


            AuthenticationProperties properties = CreateProperties(user.username);
            AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
            context.Validated(ticket);
            context.Request.Context.Authentication.SignIn(cookiesIdentity);
        }

hasta ese punto todo marcha bien, el inconveniente que tengo es que necesito agregar una claim de un CompanyID desde un controlador una vez que el usuario ya se halla logeado, el cual tengo el siguiente codigo

[Route("api/auth/{id_company}/companysession")]
        [HttpPost]
        public HttpResponseMessage FilterCountry(int id_company)
        {
            
            var context = HttpContext.Current;

            var originalUsername = context.User.Identity.Name;

            var claims = new List<Claim>();
            claims.Add(new Claim(ClaimTypes.Name, originalUsername));
            claims.Add(new Claim("CompanyID", id_company.ToString()));
            var impersonatedIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationType);

            Authentication.SignOut(CookieAuthenticationDefaults.AuthenticationType);
            Authentication.SignIn(impersonatedIdentity);

            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, "Session Succefully: " + id_company);
            return response;
        }

pero la claim no se guarda, he estado leyendo y buscando informacion y he probado casi de todo pero no logro agregar la claim del CompanyID para poder utilizarla posteriormente, en cualquier controlador por ejemplo

 var id_company = ((ClaimsIdentity)User.Identity).Claims.FirstOrDefault(x => x.Type == "CompanyID").Value;

 var result = this._gatewayServices.getGatewaysTree(User.Identity.Name.ToString(), Convert.ToInt32(id_company));
 return result;
 como mencione anteriormente la claim la necesito agregar despues del login puesto que una vez que el usuario esta autenticado, yo valido a que empresas tiene acceso el usuario y le pregunto a cual quiere ingresar y es donde capturo el id de empresa para guardarlo en una claim.

De antemano agradezco cualquier tipo de ayuda, sugerencia comentario.

Saludos.






Reply all
Reply to author
Forward
0 new messages