net example asp asp.net asp.net-mvc-4 angularjs asp.net-web-api owin

asp.net - asp - web api authentication token example c#



Autenticación de Token portador de.NET Web API 2 OWIN (2)

Puede configurarlo con su módulo de aplicación angular. Así que el token de autorización se establecerá como encabezado para cada solicitud http.

var app = angular.module("app", ["ngRoute"]); app.run(function ($http) { $http.defaults.headers.common.Authorization = ''Bearer '' + token.accessToken; });

Estoy implementando una arquitectura de servicio Web API 2 en mi aplicación web .NET. El cliente que consume las solicitudes es javascript puro, no mvc / asp.net. Estoy usando OWIN para tratar de habilitar la autenticación de tokens según este artículo Autenticación de token de portador OWIN con muestra de API web . Parece que me falta algo con el paso de autenticación después de su autorización.

Mi nombre de usuario es como sigue:

[HttpPost] [AllowAnonymous] [Route("api/account/login")] public HttpResponseMessage Login(LoginBindingModel login) { // todo: add auth if (login.UserName == "[email protected]" && login.Password == "a") { var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType); identity.AddClaim(new Claim(ClaimTypes.Name, login.UserName)); AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties()); var currentUtc = new SystemClock().UtcNow; ticket.Properties.IssuedUtc = currentUtc; ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30)); DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); return new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent<object>(new { UserName = login.UserName, AccessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket) }, Configuration.Formatters.JsonFormatter) }; } return new HttpResponseMessage(HttpStatusCode.BadRequest); }

Vuelve

{ accessToken: "TsJW9rh1ZgU9CjVWZd_3a855Gmjy6vbkit4yQ8EcBNU1-pSzNA_-_iLuKP3Uw88rSUmjQ7HotkLc78ADh3UHA3o7zd2Ne2PZilG4t3KdldjjO41GEQubG2NsM3ZBHW7uZI8VMDSGEce8rYuqj1XQbZzVv90zjOs4nFngCHHeN3PowR6cDUd8yr3VBLdZnXOYjiiuCF3_XlHGgrxUogkBSQ", userName: "[email protected]" }

Luego trato de configurar el Bearer encabezado HTTP en otras solicitudes en AngularJS como:

$http.defaults.headers.common.Bearer = response.accessToken;

a una API como:

[HttpGet] [Route("api/account/profile")] [Authorize] public HttpResponseMessage Profile() { return new HttpResponseMessage(HttpStatusCode.OK) { Content = new ObjectContent<object>(new { UserName = User.Identity.Name }, Configuration.Formatters.JsonFormatter) }; }

pero no importa lo que haga este servicio es ''no autorizado''. ¿Me estoy perdiendo de algo?


Se resuelve estableciendo el encabezado ''Autorización'' con token de portador + como:

$http.defaults.headers.common["Authorization"] = ''Bearer '' + token.accessToken;