java - 如何在 Spring Boot 中使用缓存来提高 OAuth2 ResourceServer 的性能

标签 java spring-boot spring-security oauth-2.0

我正在尝试使用受 OAuth2 保护的外部化授权服务器和资源服务器。 Spring Boot 允许使用 RemoteTokenServices 或提供 user-info-uri 等多种方式通过外部化授权服务器来保护资源服务器。我正在使用 user-info-uri 来验证资源服务器上的 token 。

通过这种安排,每当请求到达 ResourceServer 时,它只需使用 OAuth2RestTemplate 对 user-info-uri 进行 REST 调用。当流量增加时,这将使授权服务器不堪重负。这就是为什么我想缓存第一次调用的结果,并在后续调用中检查缓存中是否存在 token 。如果存在,我只想允许请求到达 Controller ,否则我想调用 user-info-uri。

如何实现这一目标。我正在使用 JWT 作为 token 。我知道当我使用 JWT 时,我可以向资源服务器提供公钥,但我不确定这是否是好方法,因为我有太多资源服务器。

我尝试按照此处的建议提供 UserInfoRestTemplateCustomizer Bean https://docs.spring.io/spring-security-oauth2-boot/docs/current-SNAPSHOT/reference/htmlsingle/#oauth2-boot-resource-server-custom-user-info但不知道在这里做什么。

最佳答案

我认为您需要提供 Spring Security Context 在将 JWT 转换为 AuthenticationContext 时使用的用户服务的自定义实现。如果您已配置,默认行为将调用用户信息端点。

配置安全上下文时可以提供自定义 OidcUserService。来自 https://docs.spring.io/spring-security/site/docs/5.1.5.RELEASE/reference/htmlsingle/#oauth2login-advanced-oidc-user-service

enter image description here

另一种选择是应用自定义 JwtAuthenticationConverter (请参阅 HttpSecurity.oauth2ResourceServer().jwtAuthenticationConverter ),它可以处理将 jwt 转换为身份验证时的问题。查看https://docs.spring.io/spring-security/site/docs/5.1.5.RELEASE/reference/htmlsingle/#oauth2resourceserver-authorization

希望这有帮助

关于java - 如何在 Spring Boot 中使用缓存来提高 OAuth2 ResourceServer 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57343107/

相关文章:

java - Tomcat 和 spring-boot-starter

java - 为什么从 MYSQL 更新时出现语法错误?

spring-boot - Spring react 的 Spring 安全 session 超时

java - 如何多次创建新的和处置jcomponents?

java - 如何在映射到 Java 对象时忽略少量 JSON 元素

java - 如何在一个应用程序中混合启用和禁用 csrf 的 spring websockets

spring-mvc - Spring 安全 : Why is my custom AccessDecisionVoter not invoked

java - 将图像上传到java spring

java - 安卓 : How to verify email address using OTP

java - 自定义列表 + JSP + java.lang.NumberFormatException