我有一个自定义属性,我手动想检查声明令牌是否有效。我该怎么做?
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
属性。这就是我需要手动检查的原因。
答案 0 :(得分:1)
一种方法是将令牌与其用户名一起存储在持久数据结构中的某个位置
例如,当您创建标识存储时,model.UserName
&您选择的数据库中的accessToken
。
然后,当您想要检查cookie
时,您可以重新打开数据库并查询它并采取相应的措施。
此外,在数据库中添加该日期还可以帮助您保持其大小,从而加快搜索速度,即如果您的令牌仅持续3个月,则删除旧版本作为维护的一部分