2017-03-22 1 views
0

J'utilise aspnetcore en studio visuel 2015. Je ai mis JwtBearerAuthentication et j'utilise avec succès l'authentification par jeton. Les utilisateurs se connectent et obtiennent un jeton.JwtBearerAuthentication en AspNetCore.Authentication.JwtBearer et rafraîchir jeton

Maintenant, mes jetons ont une durée d'expiration. Après leur expiration, les utilisateurs ne peuvent plus être validés. Je souhaite pouvoir actualiser le jeton de l'utilisateur en mode silencieux dans le client quelques minutes avant l'expiration. Comment puis-je l'obtenir dans cette configuration? Est-il possible avec Microsoft.AspNetCore.Authentication.JwtBearer?

+0

Je suppose que vous utilisez WebAPI (contrairement à MVC/Vues), dans cette Si votre middleware renvoie le code http 401 non autorisé. Votre client (le consommateur de cette API) devra réagir à cela et essayer de rafraîchir/authentifier l'utilisateur et obtenir un nouveau jeton, puis répétez la demande précédente. Cela n'a rien à voir avec le middleware JwtBearer – Tseng

+0

ok ... où est-il supposé appeler pour obtenir ce nouveau jeton? Le jeton initial est obtenu avec le nom d'utilisateur et le mot de passe – user5328504

+2

Où que vous l'ayez obtenu. ASP.NET Core Identity ne peut pas émettre de jetons JWT, vous avez donc besoin d'un middleware/bibliothèque différent (ASOS/OpenIddict ou IdentityServer4) ou vous utilisez des fournisseurs OpenID/Oauth tiers tels que Google ou Facebook, c'est là que vous devez rafraîchir le jeton si vous l'avez obtenu à partir de là. Mais votre question n'a pas les informations nécessaires, nous n'avons aucune idée d'où vous avez obtenu le JWT;) – Tseng

Répondre

0

Oui, c'est possible. Vous pouvez créer un jeton d'actualisation (par exemple, une chaîne aléatoire) et définir un délai d'expiration supérieur à votre jeton secret. Envoyez ce jeton à votre client et enregistrez-le dans le client. Chaque fois que le jeton principal expire, vous pouvez envoyer le jeton d'actualisation au serveur et le vérifier, au lieu d'envoyer l'utilisateur à la page de connexion (et de créer un nouveau jeton). Si elle n'a pas expire encore, vous créez un nouveau jeton et actualiser jeton et définir l'accès à l'utilisateur, votre tête doit contenir:

This site says... 
{ 
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJlUzl1NiJ9.eyJ1bmlxdWVfbmFtZ...", 
    "token_type": "bearer", 
    "expires_in": 119, 
    "refresh_token": "9b091854a9d3415c8ae12f07c333e5...", 
}