在SpringBoot应用程序中缓存OAuth2令牌?

时间:2019-09-26 15:20:17

标签: spring-boot caching oauth-2.0 token

我正在实现一个Spring Boot应用程序,其中的方法正在调用第三方REST端点。在OAuth2身份验证后即可访问此REST API。这就是为什么我从第三方检索令牌的原因(各种用户可以使用我的应用程序,并尊重地调用REST端点),并使用这些令牌进行授权以调用端点。但是在当前的实现中,这发生在每次调用之前。这就是为什么我想征求意见,如何缓存这些令牌以及这是否是一个好习惯?令牌也将在1小时后失效。

1 个答案:

答案 0 :(得分:1)

如果您可以将访问令牌存储在客户端并随每个请求一起发送,则不应在Web应用程序的后端缓存访问令牌。

如果您无法将其存储在客户端(可能是您的API与某些消息客户端(例如USSD,SMS等)进行通信),则获取OAuth访问令牌会很昂贵,因为它需要一个令牌端点的HTTP请求。这种情况是一个很好的例子,您可以在任何时候缓存令牌。 如果您有多个实例,则可以使用REDIS。

记住:令牌是敏感数据,因为它们授予对用户资源的访问权限。 (此外,与用户密码不同,您不能只存储令牌的哈希。)因此,保护​​令牌不被泄露至关重要。您可以使用加密。请查看以下链接以获取更多详细信息:

https://auth0.com/docs/best-practices/token-best-practices

https://github.com/auth0/express-openid-connect/blob/master/EXAMPLES.md#5-obtaining-and-storing-access-tokens-to-call-external-apis

https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/token-cache

根据Auth0令牌最佳做法

存储和重复使用。 通过存储从授权服务器获得的访问令牌,减少扩展应用程序攻击面的不必要往返,并优化计划令牌限制(在适用时)。与其请求新令牌,不如在以后的调用中使用存储的令牌,直到令牌到期为止。存储令牌的方式将取决于应用程序的特征:典型的解决方案包括数据库(对于需要执行API调用的应用程序,而不考虑会话的存在)和HTTP会话(对于活动窗口仅限于交互式会话的应用程序) )。有关服务器端存储和令牌重用的示例,请参见我们的Github存储库中的获取和存储访问令牌以调用外部API