public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { var header = context.OwinContext.Response.Headers.SingleOrDefault(h => h.Key == "Access-Control-Allow-Origin"); if (header.Equals(default(KeyValuePair <string, string[]>))) { context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); } try { var user = context.UserName; var password = context.Password; IPessoaService service = new PessoaService(); Pessoa usuario = service.Autenticar(user, password); if (usuario == null) { context.SetError("invalid_grant", "CPF ou senha inválidos"); return; } var identity = new ClaimsIdentity(context.Options.AuthenticationType); identity.AddClaim(new Claim("Nome", usuario.Nome)); identity.AddClaim(new Claim("Cpf", usuario.Cpf)); var roles = new List <string>(); if (usuario.Nome.Equals("Admin")) { roles.Add("Admin"); } else { roles.Add("Cliente"); } var props = new AuthenticationProperties(new Dictionary <string, string> { { "nome", usuario.Nome }, { "email", usuario.Email }, { "cpf", usuario.Cpf }, { "perfil", roles[0] } }); foreach (var role in roles) { identity.AddClaim(new Claim(ClaimTypes.Role, role)); } GenericPrincipal principal = new GenericPrincipal(identity, roles.ToArray()); Thread.CurrentPrincipal = principal; var ticket = new AuthenticationTicket(identity, props); context.Validated(ticket); } catch (Exception e) { context.SetError("invalid_grant", "Falha na autenticação"); } }