spring-boot - 在 SpringBoot 应用程序中缓存 OAuth2 令牌?
问题描述
我正在实现一个 Spring Boot 应用程序,其中的方法正在调用第三方 REST 端点。此 REST API 可在 OAuth2 身份验证后访问。这就是我从第三方检索令牌(各种用户可以使用我的应用程序并恭敬地调用 REST 端点)并使用这些令牌进行授权以调用端点的原因。但是在当前的实现中,这发生在每次调用之前。这就是为什么我想请教如何缓存这些令牌以及这是否是一个好习惯?令牌也会在 1 小时内到期。
解决方案
如果您可以将访问令牌存储在客户端并随每个请求一起发送,则不应在 Web 应用程序的后端缓存访问令牌。
如果您无法将其存储在客户端(可能的情况下,您的 API 正在与 USSD、SMS 等消息客户端通信),获取 OAuth 访问令牌会很昂贵,因为它需要 HTTP 请求令牌端点。这种情况是一个很好的例子,您可以尽可能缓存令牌。如果您有多个实例,则可以使用 REDIS。
记住:令牌是敏感数据,因为它们授予对用户资源的访问权限。(此外,与用户密码不同,您不能只存储令牌的哈希值。)因此,保护令牌不被泄露至关重要。您可以使用加密。请查看以下链接以获取更多详细信息:
https://auth0.com/docs/best-practices/token-best-practices。
https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/token-cache
根据 Auth0 令牌最佳实践
存储和重复使用。 通过存储从授权服务器获得的访问令牌,减少扩展应用程序攻击面的不必要往返,并优化计划令牌限制(如果适用)。与其请求新令牌,不如在以后的调用中使用存储的令牌,直到它过期。存储令牌的方式取决于应用程序的特性:典型的解决方案包括数据库(适用于无论是否存在会话都需要执行 API 调用的应用程序)和 HTTP 会话(适用于活动窗口仅限于交互式会话的应用程序) )。有关服务器端存储和令牌重用的示例,请参阅我们的 Github 存储库中的获取和存储访问令牌以调用外部 API
推荐阅读
- python - 使用 Python 和 Beautiful Soup 如何捕获空标签
- sql - 使用“trim”行在数据库中查询
- javascript - 如何在另一个div之前插入div
- wordpress - 如果是移动设备,则从特定页面重定向到特定页面
- c# - Thread.Sleep 的精度还差吗?
- php - 在 MySQL 或 PHP 中显示每个人数据的列表日期
- javascript - react-native vs reactXP
- javascript - 在 ViewModel 中使用 getter 而不是订阅 Model
- javascript - fetch api - 如何将数组附加为搜索参数
- intellij-idea - AspectJ/Jetty/Java-8:错误扫描条目 UpdateParserFiles.class