Spring Security 如何在Spring授权服务器中为令牌端点定制异常处理

brgchamk  于 2022-12-29  发布在  Spring
关注(0)|答案(1)|浏览(94)

我正在尝试为正在使用Spring Authorization Server中的“/oauth2/token”端点交换令牌代码的用户实现额外的检查。为此,我需要提供自定义错误消息、错误代码和特定的http状态(400或500除外)。
我看到代码交换从OAuth2TokenEndpointFilter开始,但它有一个严格的异常处理,如

private void sendErrorResponse(HttpServletRequest request, HttpServletResponse response,
      AuthenticationException exception) throws IOException { ... }

并且无法覆盖和设置

private AuthenticationFailureHandler authenticationFailureHandler = this::sendErrorResponse;

因此,我可以从OAuth2AuthenticationException扩展,但它不适合,因为我无法控制状态和响应主体。

n7taea2i

n7taea2i1#

好吧,我应该更仔细地阅读医生。
我仍然必须从AuthenticationException扩展,但我也可以完全控制失败,因此添加自定义主体/代码/状态

@Bean
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
    OAuth2AuthorizationServerConfigurer authorizationServerConfigurer =
            new OAuth2AuthorizationServerConfigurer();
    http.apply(authorizationServerConfigurer);

    authorizationServerConfigurer
            .tokenEndpoint(tokenEndpoint ->
                    ((OAuth2TokenEndpointConfigurer)tokenEndpoint).errorResponseHandler(errorResponseHandler)// instance of AuthenticationFailureHandler
            );

    return http.build();
}

相关问题