Token en Web API 2 – donde se guarda la información?

publicado por: Anonymous

Buenas.

Quiero saber si pueden sacarme una inquietud que estoy teniendo en el desarrollo de una API con WEB API 2.

Decidimos con mi equipo implementar la autenticación basada en token.

Una vez que el usuario se registra y luego el token es generado, esa información (token, desde, hasta etc) donde queda persistida?

No veo que se guarde nada en las tablas del modelo Identity (AspNetxx).

Muchas gracias por la ayuda.

solución

El token se genera en base a los claims, cuando expones el endpoint usando el codigo

OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),
    Provider = new ApplicationOAuthProvider(PublicClientId),
    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
    // Note: Remove the following line before you deploy to production:
    AllowInsecureHttp = true
};

// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(OAuthOptions);

Importante es la primer linea donde defines el /Token desde este es que el cliente consume el servicio que le devolvera el token que requiere para poder se autorizado en las llamadas a los demas request.
Por eso no persiste sino que es algo temporal que usaras para invocar a los servicio de webapi que requieran autenticacion.

Secure a Web API with Individual Accounts and Local Login in ASP.NET Web API 2.2

Por un lado esta la registración del usuario, y por otro esta como pides un token para poder realizar los request a los servicio webapi marcados conn [Authorize].
Del artículo analiza el titulo “Configuring the Authorization Server” allí explica como exponer el servicio de /Token como un endpoint para ser consumido por el cliente que requiere un token de autenticacion.

Cuando requieras invocar un servicio webapi debes enviar en el header ese token, el cual seguramente lo conserves en el storage del html.

[ASPNET Web API] Trabajando con bearer token en Web API

En este segundo ejemplo veras como se envia el token como Bearer en el header.

Por eso por un lado tienes los datos del usuario para validar el acceso y por otro el sistema de autorizacion usando tokens.


>>1) Si el token no se persiste y se genera dinámicamente… Cada vez que se haga un request y se pase el token por heder (autorization) contra que lo compara?

Entiendo que aqui es donde entran en juego los claims ya que la info que asignes sera usada para generar el token. Si analiza el ejemplo del primer link veras una linea que define

Provider = new ApplicationOAuthProvider(PublicClientId),

El código que implementa lo podrias analizar de github

ApplicationOAuthProvider.cs

Podras localizar la validacion de las credenciales del usuario

ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);

Y como genera los Claims que definiran al token.

ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, OAuthDefaults.AuthenticationType);

Del lado del servicio webapi cuando le llega el token validara su vigencia, pero no las credenciales del usuario, eso ya lo realizo cuando se solicito el token. Entre el cliente que recibe el token y el servidor que lo genera no hay comunicacion.

>>2) Que pasa si se realiza un reset del iis?

El token tiene el tiempo de expiración, es mas cuando se define el OAuthAuthorizationServerOptions se puede especificar este valor

AccessTokenExpireTimeSpan = TimeSpan.FromDays(14)

Aunque la idea es que sea lo mas pequeña posible, por eso se recomienda que analices implementar el RefreshToken

AngularJS: Enable OWIN Refresh Tokens Using ASP.NET Web API 2

Como comenta @rsciriano si reinicias el servicio de IIS del cliente el token aun sera válido.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *