如何在 OAuth2 资源服务器中设置自定义 403 响应?

Posted

技术标签:

【中文标题】如何在 OAuth2 资源服务器中设置自定义 403 响应?【英文标题】:How to set custom 403 response in OAuth2 resource server? 【发布时间】:2021-06-03 09:24:51 【问题描述】:

春季启动 2.4.3 如果用户没有操作权限,它会给出 403 响应,但没有任何响应正文。但是设置了标题WWW-Authenticate

WWW-Authenticate: Bearer error="insufficient_scope", error_description="The request requires higher privileges than provided by the access token."

我仍然希望有一些带有消息的响应正文。我怎样才能实现它?

    protected void configure(HttpSecurity http) throws Exception 
        http
                .httpBasic().disable()
                .formLogin(AbstractHttpConfigurer::disable)
                .csrf(AbstractHttpConfigurer::disable)
                .authorizeRequests(authorize -> authorize
                        .mvcMatchers(HttpMethod.GET, "/app/**", "/admin/**").authenticated()
                        .mvcMatchers(HttpMethod.PUT, "/app/**", "/admin/**").authenticated()
                        .mvcMatchers(HttpMethod.POST, "/app/**", "/admin/**").authenticated()
                )
                .oauth2ResourceServer()
                .jwt()
                .jwtAuthenticationConverter(jwtAuthenticationConverter());
    

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,找到了以下解决方案:

public class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint 
    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response,
            AuthenticationException e) throws IOException, ServletException 
        e.getCause().printStackTrace();

        response.setStatus(...);
        response.setContentType(...);
        response.getWriter().write("your custom error response");
    

然后在您的安全配置中:

http. 
  //...
    .oauth2ResourceServer()
    .authenticationEntryPoint(new CustomAuthenticationEntryPoint())

【讨论】:

返回正常状态? :) 已更新。在我的用例中,我返回了一个 GraphQL 错误,该错误旨在始终返回 200 Ok。

以上是关于如何在 OAuth2 资源服务器中设置自定义 403 响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 fhirclient-4.0.0 python 库中设置自定义标头?

如何在 s-s-rs 报告服务中设置自定义货币

如何在 ActionBar 标题中设置自定义字体?

如何在 iOS 中设置自定义属性? [复制]

如何在 alamofire 5.0.2 版本中设置自定义超时

我如何在android中设置自定义日期