none
Autenticacion personalizada en Web API 2 con OWIN RRS feed

  • Pregunta

  • El tema es el siguiente. Estoy trabajando en el sistema de autentican para una API en Web API 2, de acuerdo con cierta necesidad del proyecto mi OAuthProvider es de la siguiente manera:

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { context.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); string rol = null; if (context.Request.Headers.ContainsKey("X-Role")) { rol = context.Request.Headers.Get("X-Role"); switch (rol) { case "user": bool isValidCredentials = await //Logica que verifica credenciales. if (isValidCredentials) { //Crea y prepara el objeto ClaimsIdentity var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType); identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName)); identity.AddClaim(new Claim(ClaimTypes.Role, "user")); var data = new Dictionary<string, string> { {"email", context.UserName} }; var properties = new AuthenticationProperties(data); var ticket = new AuthenticationTicket(identity, properties); context.Validated(ticket); return; } else { context.SetError("Invalid user or password."); return; } case "things": //Logica para autenticar things. return; default: context.SetError("The role is not valid."); return; } } else { context.SetError("The role header is required."); return; } }

    Con este codigo todo va bien y funciona como debería.

    A continuación dejo el codigo de el metodo GET de mi controlador Customer.

    [Authorize(Roles = "user")] [Route("{email}")] public async Task<PcCustomer> Get([FromUri] string email) { var allData = await CustomerData(email); return allData;

    El asunto es que necesito validar que el email del cual se está solicitando la información del customer sea el mismo para el cual se solicitó el token para evitar el consecuente riesgo de seguridad. Como puedo hacer esto, tengo la idea de que si desde CustomerController tengo acceso a la Claimsidentity creada en OAuthProvider pero no se como hacer eso. Como puedo implementar el comportamiento descrito ?

    jueves, 26 de julio de 2018 3:53