首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内存中存储JWT令牌是一个很好的实践吗?

在内存中存储JWT令牌是一个很好的实践吗?
EN

Stack Overflow用户
提问于 2020-02-12 03:23:38
回答 2查看 13.7K关注 0票数 7

我编写了一个asp.net核心3.0 web,在这里我使用JWT令牌对用户进行身份验证。一旦用户获得令牌,他/她就可以使用它,直到它过期。

我所做的就是在身份验证时将此令牌存储在内存中,以获得其他最小的详细信息,例如用户名、生成的令牌和“令牌”。

  1. ,我的第一个问题是,这是一个好的实践吗?由于令牌是无状态的,因此可以将服务器端从维护它的麻烦中节省下来。
  2. 我的第二个问题是,如果这样做是可以接受的,那么在令牌过期后如何从内存中删除此令牌信息?
  3. ,如果我没有将该令牌存储在内存中,如何提取“获取所有登录用户的列表”之类的信息。
EN

回答 2

Stack Overflow用户

发布于 2020-02-12 06:05:05

  1. 是的,在内存缓存中缓存JWT是一个很好的实践,比如Redis或简单的内存缓存。新创建的令牌被缓存在内存中,缓存的清除时间与令牌过期时间相同。当请求进入验证令牌时,
  2. 首先检查它是否存在于内存缓存中,如果不存在,将被查找到像db.
  3. 这样的持久存储中,当用户注销令牌(即注销)时,应该从缓存中删除它,并在db.

中将状态更新为无效。

在分布式应用程序中,维护状态是一个挑战。因此,最好由redis支持单独的缓存层。这样,我们就可以维护应用程序的无状态性。

除了令牌过期时间之外,您还可能希望添加额外的验证检查,这取决于JWT的内容(aud声明、签名验证等)。要回顾JWT令牌的内容,可以使用以下工具

https://devtoolzone.com/decoder/jwt

干杯,Lakshmanan

票数 13
EN

Stack Overflow用户

发布于 2020-02-12 03:38:29

当您说“在内存中”时,这是指在客户端机器上还是在服务器的某个地方?我假设你指的是客户端。

目前我自己正在使用JWT,下面是我的建议:

1)将令牌保存在会话存储中。2)只需清空会话(或存储它的地方)。3)如果你想访问它,你肯定需要把它存放在某个地方。但是,获取所有用户的列表听起来像是想要后端的数据。您可以在后端服务器上跟踪这一点,但是通常这些令牌被处理并持久化到数据库中。但是,即使在后端服务器上,也可以有一个客户机对象数组来跟踪哪些对象已登录(即哪些对象有未过期的令牌)。

典型的实践是生成两个令牌(auth令牌和刷新令牌),然后在用户提交令牌进行身份验证时根据数据库检查它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60180615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档