2017-02-03 43 views
2

我想設置IdentityServer 3的Web應用程序而不是硬件,這是一個與軟件開發相關的問題。我正在嘗試學習如何使用該技術並生成我的api可以使用的JWT令牌。問題是我不能爲我的生活找到設置令牌到期的地方。大約一個小時後它總是會產生一個401。理想情況下,爲了測試目的,我希望將其延長很長一段時間,所以我不必將我的JWT令牌複製並粘貼到提琴手中,從而大大減緩了我的開發和學習過程。如何延長身份服務器頒發的JWT令牌的壽命3

我的客戶

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 
      } 

我的範圍

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 
       } 
      } 

方法用於客戶的具體要求:

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; 
    } 

代碼實際驗證憑據:

  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."); 
      } 

回答

1

訪問令牌壽命(我想這是你的JWT令牌的意思),可以使用Client財產AccessTokenLifetime客戶端應用程序進行設置。

默認情況下,它被設置爲3600秒(1小時)。

+0

謝謝你,我研究了AccesTokenLifetime,然後把我帶到文檔。非常感謝你。 –

相關問題