让我解释一下我的用例。
我需要一个 spring boot oauth2 客户端应用程序(不是资源服务器,因为我们已经有一个单独的资源服务器)。另外我有以下要求:
对于每个到资源服务器的外出请求,我们需要发送 id_token。(通过自定义 resttemplate 完成)。
对于任何请求,无论它是否调用资源服务器,如果访问令牌过期,我的应用程序必须自动刷新它(没有任何用户干预,如任何弹出或重定向。)。
如果 refresh_token 也已过期,则必须注销用户。
问题:
对于第 2 点和第 3 点,我花了很多时间阅读文档和代码以及 Stack Overflow,但无法找到解决方案(或不理解)。所以我决定把我在许多博客和文档中找到的所有部分放在一起,并提出我的解决方案。以下是我对第 2 点的解决方案。
我们可以看看下面的代码并建议这种方法是否有任何问题吗?
/**
*
* @author agam
*
*/
@Component
public class ExpiredTokenFilter extends OncePerRequestFilter {
private static final Logger log = LoggerFactory.getLogger(ExpiredTokenFilter.class);
private Duration accessTokenExpiresSkew = Duration.ofMillis(1000);
private Clock clock = Clock.systemUTC();
@Autowired
private OAuth2AuthorizedClientService oAuth2AuthorizedClientService;
@Autowired
CustomOidcUserService userService;
private DefaultRefreshTokenTokenResponseClient accessTokenResponseClient;
private JwtDecoderFactory<ClientRegistration> jwtDecoderFactory;
private static final String …Run Code Online (Sandbox Code Playgroud) spring-security oauth-2.0 spring-security-oauth2 spring-oauth2