Spring 授权服务器 0.2.2,如何禁用像 (OAuth2TokenRevocation) 这样的默认身份验证提供程序并用自定义的身份验证提供程序覆盖它?

Spring Authorization Server 0.2.2, how to disable a default authentication provider like (OAuth2TokenRevocation) and override it with a custom one?

我正在使用新的 Spring 授权服务器 0.2.2,我想更改 OAuth2TokenRevocationAuthenticationProvider 的逻辑并为令牌撤销端点制作我自己的实现。

我添加了一个新的CustomRevocationAuthenticationProvider

public class CustomRevocationAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        //My implementation
        try {

        //My implementation

        } catch (Exception e) {
            throw new OAuth2AuthenticationException(OAuth2ErrorCodes.INVALID_CLIENT);
        }

        //My implementation
    }


@Override
public boolean supports(Class<?> authentication) {
    return OAuth2TokenRevocationAuthenticationToken.class.isAssignableFrom(authentication);
}

然后我将此提供商添加到 SecurityFilterChain,如下所示:

@Bean
public SecurityFilterChain authServerSecurityFilterChain(HttpSecurity http) throws Exception {
        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
        return http.formLogin(Customizer.withDefaults())
                .authenticationProvider(new CustomRevocationAuthenticationProvider())
                .build();
    }

它运行良好,但是当我在我的实现中抛出一个 OAuth2AuthenticationException 时,默认的 OAuth2TokenRevocationAuthenticationProvider 被执行并且 return 200 OK 响应。

有什么方法可以禁止默认的 oauth2 提供程序处理我的异常并执行吗?

好问题。由于我们正在处理参考文档,这是一个很好的主题,我会在配置概述中做一个注释。

看看OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http)。自定义 Spring 授权服务器时,您通常需要复制该代码并直接使用配置器。这是一个例子:

OAuth2AuthorizationServerConfigurer<HttpSecurity> authorizationServerConfigurer =
    new OAuth2AuthorizationServerConfigurer<>();
authorizationServerConfigurer.tokenRevocationEndpoint(tokenRevocationEndpoint -> tokenRevocationEndpoint
    .authenticationProvider(new CustomRevocationAuthenticationProvider())
);

// ...

http.apply(authorizationServerConfigurer);