c# - como - Generar token en el controlador
token de autenticación (1)
Puede generar un token de acceso dentro de un controlador llamando a OAuthBearerOptions.AccessTokenFormat.Protect(ticket)
y el código se verá como se muestra a continuación:
private JObject GenerateLocalAccessTokenResponse(string userName)
{
var tokenExpiration = TimeSpan.FromDays(1);
ClaimsIdentity identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, userName));
var props = new AuthenticationProperties()
{
IssuedUtc = DateTime.UtcNow,
ExpiresUtc = DateTime.UtcNow.Add(tokenExpiration),
};
var ticket = new AuthenticationTicket(identity, props);
var accessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket);
JObject tokenResponse = new JObject(
new JProperty("userName", userName),
new JProperty("access_token", accessToken),
new JProperty("token_type", "bearer"),
new JProperty("expires_in", tokenExpiration.TotalSeconds.ToString()),
new JProperty(".issued", ticket.Properties.IssuedUtc.ToString()),
new JProperty(".expires", ticket.Properties.ExpiresUtc.ToString())
);
return tokenResponse;
}
Y debe declarar sus OAuthBearerOptions
como propiedad static
en la clase Startup.cs
Pero si está buscando implementar una actualización silenciosa para el token de acceso sin solicitarle al usuario que inicie sesión nuevamente, entonces debería considerar implementar la concesión de renovación de token, no lo haga de la manera que sugirió. Puede leer mi publicación detallada en el blog sobre cómo generar tokens de actualización en el SPA creado con AngularJS.
Espero que esto responda a su pregunta.
Estoy usando Owin y ASP.NET Identity para usar tokens de OAuth para proteger mis métodos de API web. El subsistema token está configurado como tal:
var oauthOptions = new OAuthAuthorizationServerOptions()
{
TokenEndpointPath = new PathString("/Token"),
Provider = new SimpleAuthorizationServerProvider(),
AccessTokenFormat = new TicketDataFormat(app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, "Access_Token", "v1")),
RefreshTokenFormat = new TicketDataFormat(app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, "Refresh_Token", "v1")),
AccessTokenProvider = new AuthenticationTokenProvider(),
RefreshTokenProvider = new AuthenticationTokenProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
app.UseOAuthAuthorizationServer(oauthOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
Funciona muy bien para solicitar tokens en función del nombre de usuario / contraseña y luego consumirlos. Sin embargo, dado que el usuario ya está autenticado cuando golpea el controlador que procesa el SPA, me gustaría generar el token en mi vista y pasarlo al código de Javascript, en lugar de tener que iniciar sesión nuevamente en el SPA.
Entonces, mi pregunta es: ¿cómo genero manualmente mi token para poder incluirlo en mi vista de SPA?