java - 在 Java 中保存解码和验证的 JWT/访问 token

标签 java access-token jwt

我是 API 所有者,将解码作为授权 header 的一部分传递的 JWT 或访问 token ,以便使用我的服务。由于解码是一个成本高昂的过程,因此我计划将 token 保存在弱 HashMap 或 CacheBuilder 中

private Map cache = new WeakHashMap();  

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
   .expireAfterWrite(10, TimeUnit.MINUTES)

首先,这是一个好的做法吗?

第二,如果不是,除了每次都验证之外我还有什么其他选择?

最佳答案

不,这不是一个好的做法(如果您特别谈论 JWT)。 JWT 的主要目标之一是使服务器免于查找任何其他位置( session 、本地存储、数据库)。通过这种方式,您可以获得真正的无状态 API,服务器可以以相同的方式处理请求,无论这是第一个客户端的请求还是第 100 个客户端的请求。拥有这种灵活性大大降低了分布式部署(即集群)的复杂性。每个节点只需要知道如何验证 JWT(如果已加密,则对其进行解密),通常只需为其提供共享 key 即可。没有 session 复制,没有数据库查找,没有节点间通信。

与数据库查找或 session 复制机制相比,检查 token (检查签名并在必要时解密)的成本可以忽略不计。仅在单个服务器节点的情况下,您对 HashMap 的争论才会产生更好的性能。然而现在,您希望编写一个可以轻松部署到集群的 API。

您需要决定是否加密 JWT(这可以节省一些处理时间)。通常加密根本没有必要,人们只是添加它,因为它听起来“更安全”。考虑一下您将放入代币中的数据,如果落入坏人之手,它是否会被滥用。

关于java - 在 Java 中保存解码和验证的 JWT/访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33425879/

相关文章:

java - 放大 Activity 之间的动画

angular - 从 Angular 的第一个选项卡注销时,从第二个选项卡注销问题

java - 如何在maven中添加jar路径?

java - 标签根据用途不同大小

java - ServletContext getResource 不工作

oauth - 在 hybridauth 中恢复访问 token

security - 为什么 OAuth v2 同时具有访问 token 和刷新 token ?

node.js - 最简单的 Node.js/Express 授权

java - 简单的承载 token 身份验证?

node.js - 生成 JSON Web Token 后,我该如何使用它? ( Node .js)