Security 是否可以使用Nancy.Authentication.token撤消令牌?

Security 是否可以使用Nancy.Authentication.token撤消令牌?,security,authentication,token,nancy,Security,Authentication,Token,Nancy,我已经查看了源代码和测试,但没有找到撤销令牌的方法。我需要介绍禁用用户访问的场景,并需要立即执行 假设令牌存储在keyChain.bin中,则可能会对集合进行反序列化,对所有令牌进行脱托克化,删除所需的,然后再次序列化集合。这听起来很复杂。我还有其他方法可以用吗 更新 我可能会保留一个单独的用户ID列表和已发布的令牌,然后将令牌与密钥链集合匹配 更新2 在玩了keyChain文件之后,事情就变得更加混乱了。创建新用户后,我发出一个令牌: var newServiceIdentity = site

我已经查看了源代码和测试,但没有找到撤销令牌的方法。我需要介绍禁用用户访问的场景,并需要立即执行

假设令牌存储在keyChain.bin中,则可能会对集合进行反序列化,对所有令牌进行脱托克化,删除所需的,然后再次序列化集合。这听起来很复杂。我还有其他方法可以用吗

更新

我可能会保留一个单独的用户ID列表和已发布的令牌,然后将令牌与密钥链集合匹配

更新2

在玩了keyChain文件之后,事情就变得更加混乱了。创建新用户后,我发出一个令牌:

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

我存储令牌并在每次Ajax调用时返回它。这里的含义是我确实记录了令牌,否则身份验证将失败。但是如果keyChain.bin没有更新,那么我就不能在单独的存储中注册令牌和用户,然后清除该令牌以撤销访问。

正如代码作者Jeff向我解释的那样,keyChain.bin只存储用于生成令牌的密钥。这使得相关信息仅存储在客户机上,并使用客户机令牌的简单比较来避免查询后端源。杰夫的

一个可能的解决方案是保留一个单独的黑名单令牌/用户列表。也许这最好是由商业惯例决定的。确实有些时候,您应该立即将用户锁定在外部。这可以通过对所有令牌发出清除,并强制所有合法用户登录来实现。对某些场景来说是一个小小的不便,而对其他场景来说则是不可接受的

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