我已经查看了源代码和测试,但没有看到撤销令牌的方法。我需要涵盖禁用用户访问并需要立即发生的情况。是否可以用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没有更新,那么我不能追求在单独的商店中注册令牌和用户的想法,然后清除该令牌以撤销访问。