gpt4 book ai didi

api - RESTful API 中身份验证 token 的存储位置

转载 作者:行者123 更新时间:2023-12-02 01:00:17 26 4
gpt4 key购买 nike

我已经开始设计一个 RESTful API,并且正在考虑如何处理身份验证。我想使用某种身份验证 token ,但我无法使用 OAuth o 类似的基础设施,因此我必须自己处理。

此 API 的要求之一是它必须具有良好的性能,足以在需要扩展之前处理大量请求;我关心的是如何使每个请求验证 token (完整性、过期时间、IP 地址等)所需的时间尽可能短。

我认为 token 应该是某种哈希值,而不是包含用户信息的加密字符串,因为解密时间会很长。

我读到,我可以将 token 存储在内存中的哈希表中,其中键是 token ,值是处理请求所需的用户信息,但是如何在集群环境中实现此操作每个“节点”上都会有一个哈希表?

我是否应该将 token 放在数据库表上并每次都访问数据库并手动处理过期票证的保留?

可能这对于这个问题来说并不那么重要,但我正在使用 Spring MVC 作为 RESTfull API。

提前致谢。

最佳答案

我通过使用内存缓存和数据库缓存解决了我的问题。以下是我的解决方案的摘要,可以帮助任何完成相同任务的人。

  • 用户登录后,系统会生成唯一 key 并将其发送回用户。
  • 该登录 token (基本上是经过一些处理的 GUID)也存储在数据库表中,其中包含过期等附加信息以及用户的信息和角色。相同的信息也存储在内存中(谷歌 Guava 哈希表,其中 token 是键)
  • token 必须按照 @ipa 的建议与授权 token 中的每个 API 调用一起传递
  • 服务器代码检查 token 是否在其内存缓存中,用户信息是否已经可用,否则(例如,API 调用是在集群中的另一个节点上完成的) token 在 token 数据库中搜索
  • 找到 token 后,您可以检查过期时间、角色等...

这提供了良好的性能和安全性,可以使用任何任意算法生成 token ,甚至是相对较慢的算法,因为您不必在每次 api 调用时重新计算它。这也适用于可以水平扩展的无状态服务。

关于api - RESTful API 中身份验证 token 的存储位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414178/

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