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;