2016-05-13 59 views
0

我有一個自定義屬性,我手動檢查索賠令牌是否有效。我怎麼做?手動檢查索賠令牌是否可以

public class AuthorizeClaimsAttribute : AuthorizeAttribute { 
    protected override bool UserAuthorized(IPrincipal user) { 
     var cookie = HttpContext.Current.Request.Cookies.Get("bearerToken"); 
     if (cookie != null) { 
      //Check if token is valid, how? 
     } 
     return false; 
    } 
} 

令牌創建如下:

var identity = new ClaimsIdentity(OAuthDefaults.AuthenticationType); 
     identity.AddClaim(new Claim("Username", model.Username)); 
     identity.AddClaim(new Claim("IsAdmin", isAdmin.ToString())); 

     var properties = new AuthenticationProperties() { 
      IssuedUtc = DateTime.UtcNow, 
      ExpiresUtc = DateTime.UtcNow.Add(Startup.OAuthOptions.AccessTokenExpireTimeSpan) 
     }; 

     var ticket = new AuthenticationTicket(identity, properties); 
     var accessToken = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket); 

注:我不能使用現有Authorize屬性。這就是爲什麼我需要手動檢查它。

回答

1

一種方法是在一些地方保存令牌沿着其用戶名的持續性數據結構

例如,當您在選擇的數據庫中創建的身份商店model.UserName &的accessToken

然後,當您想檢查您的cookie時,您可以重新打開您的數據庫並進行查詢並採取相應的措施。

此外,加入該日期在數據庫中也將幫助你保持下來,從而加快搜索速度的大小,也就是說,如果你的令牌只持續了3個月,刪除舊的維護的一部分

+0

所以我需要將令牌保存在某個地方?這是手動驗證我的唯一方法嗎? – MrProgram

+0

當您在持久數據結構中創建'identity' store' var accessToken = Startup.OAuthOptions.AccessTokenFormat.Protect(ticket);'identity.AddClaim(new Claim(「Username」,model.Username))''。然後,當檢查'cookie'時,你也可以對其進行比較。 – Harvey