2017-02-03 1 views
2

J'essaie de configurer une application Web IdentityServer 3 non matérielle, c'est une question liée au développement logiciel. J'essaie d'apprendre à utiliser la technologie et à produire des jetons JWT que mon api peut consommer. Le problème est que je ne peux pas pour la vie de moi trouver où placer l'expiration du jeton. Il produit toujours un 401 après environ une heure. Idéalement, à des fins de test, je souhaite prolonger cette durée de sorte que je ne doive pas copier et coller mon jeton JWT dans un violoniste, ce qui ralentit considérablement mon processus de développement et d'apprentissage.Comment prolonger la durée de vie d'un jeton JWT émis à partir d'IdentityServer 3

Mon client

new Client 
      { 
       ClientId = "scheduling" 
       ,ClientSecrets = new List<Secret> 
       { 
        new Secret("65A6A6C3-A764-41D9-9D10-FC09E0DBB046".Sha256()) 
       }, 
       ClientName = "Patient Scheduling", 
       Flow = Flows.ResourceOwner, 
       AllowedScopes = new List<string> 
       { 
        Constants.StandardScopes.OpenId, 
        Constants.StandardScopes.Profile, 
        Constants.StandardScopes.OfflineAccess, 
        "read", 
        "adprofile", 
        "scheduling" 
       }, 
       Enabled = true 
      } 

Mon Scope

new Scope 
      { 
       Name = "scheduling", 
       Claims = new List<ScopeClaim> 
       { 
        new ScopeClaim(Constants.ClaimTypes.Role,true), 
        new ScopeClaim("scheduling_id",true), 
        new ScopeClaim("expires_at",true) //I have tried "expires_in" and [Constants.ClaimTypes.Expiration] also with no luck 
       } 
      } 

Méthode utilisée pour les revendications particulières des clients:

private IEnumerable<Claim> GetClaimByClientId(string client_id) 
    { 
     List<Claim> claims = new List<Claim>(); 
     switch(client_id.ToLower()) 
     { 
      case "scheduling": 
       claims = new List<Claim>(); 
       claims.Add(new Claim(ClaimTypes.Role,"administrator")); 
       claims.Add(new Claim("scheduling_id", "2")); 
       //claims.Add(new Claim("expires_in", "2082758400")); //01/01/2036 
       //claims.Add(new Claim(Constants.ClaimTypes.Expiration, "2082758400")); //01/01/2036 
       claims.Add(new Claim("expires_at", "2082758400")); //01/01/2036 
       break; 
      default: 
       throw new Exception("Client not found with provided client id."); 
     } 


     return claims; 
    } 

code de vérification des pouvoirs: fait valider

  if (ActiveDirectoryHelper.ValidateCredentials(context.UserName, context.Password, adName)) 
      { 

       List<Claim> lstClaims = new List<Claim> 
       { 
        new Claim("obj_id",user.UserID.ToUpper()), 
        new Claim(Constants.ClaimTypes.Email, string.IsNullOrEmpty(user.Email) ? string.Empty : user.Email.ToLower()), 
        new Claim(Constants.ClaimTypes.GivenName,user.FirstName), 
        new Claim(Constants.ClaimTypes.FamilyName,user.LastName), 
        new Claim("EmployeeNumber",user.EmployeeNumber), 


       }; 

       lstClaims.AddRange(GetClaimByClientId("scheduling")); 


       context.AuthenticateResult = new AuthenticateResult(user.UserID,user.Username, lstClaims); 
      } 
      else 
      { 
       context.AuthenticateResult = new AuthenticateResult("Invalid Login."); 
      } 

Répondre

1

vie jeton d'accès (je suppose que c'est ce que vous entendez par jeton JWT) peut être défini pour une application client en utilisant la propriété ClientAccessTokenLifetime.

Par défaut, ce paramètre est défini sur 3600 secondes (1 heure).

+0

Merci et j'ai fait des recherches sur AccesTokenLifetime qui m'a ensuite amené à la documentation. Merci beaucoup. –