Swagger ui 未加载 Oauth2

Swagger ui is not getting loaded with Oauth2

我开发了一个带有 spring 引导和 oauth2 的演示应用程序。我有以下三个应用程序。

  1. 资源api:这将包含我们需要保护的所有方法。
  2. 身份验证服务器:这是一个提供令牌的 oauth2 服务器
  3. UI: 认证服务器登录成功后即可访问资源

我几乎没有可以公开访问的资源(控制器)。但是当我试图访问 swagger ui 时,它要求我进行完整的身份验证。当我添加下面的代码时,swagger 页面即将出现,但不仅是整个页面中的一个下拉菜单,而且它也被破坏了。

http
.anonymous() //allow anonymous access
.and()
.authorizeRequests()
.antMatchers("/shouldbepublic/**", "/swagger-ui**/**").permitAll().and() //this should be public resources
.formLogin().loginPage("/login").permitAll()
.and()
.requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
.and()
.authorizeRequests().anyRequest().authenticated();

另一种选择(如果对您安全的话)是让 Spring 安全性完全忽略 /swagger-ui 路径。

在您的安全 @Configuration 文件中扩展 WebSecurityConfigurerAdapter 并添加以下内容:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers(HttpMethod.GET, "/swagger-ui/**");
    super.configure(web);
}

如果您使用的是 Swagger2,请尝试允许:

http.authorizeRequests().antMatchers("/configuration/**","/swagger**","/webjars/**","/v2/**").permitAll();

使其正常工作。

这是一个适合我的配置:

.antMatchers("/swagger-ui.html","/swagger-resources/**", "/v2/api-docs/**").permitAll()'.antMatchers("/swagger-ui.html","/swagger-resources/**", "/v2/api-docs/**").permitAll()

没有那个 swagger-ui.html 无法显示

完整的 ResourceServiceConfiguration 可以在这里找到:

@Configuration
@EnableResourceServer
public static class ResourceServiceConfiguration extends ResourceServerConfigurerAdapter {

  @Override
  public void configure(final HttpSecurity http) throws Exception {
    // @formatter:off
    http.csrf().disable().authorizeRequests()
    // This is needed to enable swagger-ui interface.
    .antMatchers("/swagger-ui.html","/swagger-resources/**", "/v2/api-docs/**").permitAll()
    .antMatchers("/**").hasAuthority("ADMIN");
    // @formatter:on
  }
}

在我的例子中,使用 Spring Security 5 和 OAuth2 以及 Spring Actuator 和 Swagger/Swagger-UI 我不得不用这个 class 覆盖 Spring Security:

@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(final HttpSecurity http) throws Exception {
        http
            .antMatcher("/**")
                .authorizeRequests()
            .antMatchers(
                    "/",
                    "/actuator/**",
                    "/v2/api-docs/**",
                    "/swagger-ui.html",
                    "/swagger-resources/**",
                    "/webjars/**"
                )
                .permitAll()
            .anyRequest()
                .authenticated()
            .and()
            .oauth2Login()
        ;
    }

}