gpt4 book ai didi

security - 是否可以使用 Nancy.Authentication.Token 撤销 token ?

转载 作者:行者123 更新时间:2023-12-02 22:15:26 25 4
gpt4 key购买 nike

我查看了源代码和测试,但没有找到撤销 token 的方法。我需要涵盖禁用用户访问并需要立即发生的情况。

鉴于 token 存储在 keyChain.bin 中,可能可以反序列化集合,取消 token 化所有 token ,删除所需的 token ,然后再次序列化集合。这听起来很复杂。我还可以使用其他方法吗?

更新

我可以保留一个单独的用户 ID 列表和已颁发的 token ,然后将 token 与 keyChain 集合进行匹配。

更新2

在使用了 keyChain 文件之后,事情变得更加困惑了。创建新用户后,我发出一个 token :

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

默认情况下,Nancy 会将每个 token 存储在二进制文件中,以便在您的服务器需要退回时,用户 session 将继续存在。通过不同的浏览器 session ,我连接新用户凭据并获得对该网站的访问权限。当我添加另一个用户时,我希望 allKeys 计数会增加以反射(reflect)我的管理 session 以及与不同浏览器连接的新用户。我看到计数为一,并且 key 与管理 token 匹配。

我的登录方法确实为每个使用正确凭据连接的用户颁发了一个 token 。这个逻辑是:

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

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

最佳答案

正如代码作者 Jeff 向我解释的那样,keyChain.bin 仅存储用于生成 token 的 key 。这样相关信息仅存储在客户端上,并且通过客户端 token 的简单比较来避免查询后端源。杰夫的complete explanation is here

一个可能的解决方案是保留一个单独的黑名单代币/用户列表。也许这最好由商业实践决定。确实有时您应该立即锁定用户。这可以通过清除所有 token 并强制所有合法用户登录来完成。对于某些场景来说会带来轻微的不便,而对于其他场景来说则是 Not Acceptable 。

关于security - 是否可以使用 Nancy.Authentication.Token 撤销 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25529030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com