我已經查看了源代碼和測試,但沒有看到撤銷令牌的方法。我需要涵蓋禁用用戶訪問並需要立即發生的情況。是否可以用Nancy.Authentication.Token取消令牌?
鑑於令牌存儲在keyChain.bin中,可能會對該集合進行反序列化,對所有令牌進行detoken化,刪除所需的on,再次序列化該集合。這聽起來很精細。還有其他方法可以使用嗎?
更新
潛在的我可以保持用戶ID的單獨列表,他們已經發出令牌,然後匹配與鑰匙扣收集令牌。
更新2
與鑰匙串文件播放後,事情多一點混亂。創建新用戶後,我發出了一個令牌:
var newServiceIdentity = siteSecurityManager.CreateServiceUser(user.UserId, user.Password)
.GetServiceIdentity();
string token = _tokenizer.Tokenize(newServiceIdentity, this.Context);
newServiceIdentity.Token = token;
siteSecurityManager.RegisterToken(newServiceIdentity);
var fileStore = new FileSystemTokenKeyStore(_rootPathProvider);
var allKeys = fileStore.Retrieve() as Dictionary<DateTime, byte[]>;
return new { Token = token };
默認情況下,南茜會在二進制文件中的每個標記存儲,這樣如果你的服務器需要被退回,用戶會話將生存。通過不同的瀏覽器會話,我可以連接新的用戶憑據並訪問該網站。當我添加另一個用戶時,我希望allKeys數會遞增以反映我的管理會話以及與不同瀏覽器連接的新用戶。我看到一個數字,並且密鑰與管理令牌相匹配。
我的登錄方法確實爲每個用正確憑證連接的用戶發出一個令牌。邏輯是:
var userServiceIdentity = ServiceIdentityMapper.ValidateUser(user.UserId, user.Password);
if (userServiceIdentity == null)
{
return HttpStatusCode.Unauthorized;
}
else
{
string token = _tokenizer.Tokenize(userServiceIdentity, this.Context);
return new { Token = token };
}
我存儲令牌並將其與每個Ajax調用一起返回。這裏的含義是,我確實記錄了令牌,否則認證將失敗。但是,如果keyChain.bin沒有更新,那麼我不能追求在單獨的商店中註冊令牌和用戶的想法,然後清除該令牌以撤銷訪問。