如何使用 springfox 在 Swagger UI 中绕过授权

Posted

技术标签:

【中文标题】如何使用 springfox 在 Swagger UI 中绕过授权【英文标题】:How to bypass Authorization in Swagger UI using springfox 【发布时间】:2019-06-30 08:42:17 【问题描述】:

当请求来自 Swagger-UI,测试环境时,我需要绕过 Spring Security。这样我们就可以快速测试,而不必每次都生成新的令牌,因为无论如何都要测试数据。

我的应用程序正在 Spring Boot 上运行。我实现了 Spring 安全性,因此用户必须提供有效的访问令牌(标头)才能获得有效的响应,否则应用程序将返回 HTTP 401。它与 Spring Fox 配合得很好,但我需要一种方法来关闭或在至少在授权中提供一个静态令牌,这样测试人员就不必为每个请求都这样做。

我尝试查看他们的文档,希望找到一个开关,特别是当请求来自 Swagger UI 时将其关闭。

我正在使用: -Springboot 2.0.3 -springfox 2.8.0

【问题讨论】:

使用配置文件我们可以让事情正常工作...... spring.profiles.active=swagger ....并分别使用 webscurity 和 swagger 安全配置,并允许所有 url 在 swagger 配置安全 是的,我正在使用 spring 配置文件,但我只需要绕过传入的请求以进行招摇,如果用户将使用休息客户端,即:邮递员,他们应该被要求提供身份验证标头,因为请求不是来自招摇。因此对于 spring.profiles.active=swagger,允许来自 swagger 的请求,但需要其他所有内容的授权。我在 C# 框架中看到这项工作,希望 Springfox 具有类似的功能。 从设计的角度来看,我认为这没有意义。如果您允许用户访问资源而无需通过 swagger 进行身份验证,那么当他们从邮递员或其他方式访问应用程序时,您为什么要保护他们。我认为使用配置文件的建议是正确的,然后有 2 种不同的构建,一种可能在 dev 中所有内容都打开,另一种像 QA 和更高的环境一样安全。 【参考方案1】:

使用这个....

@SpringBootApplication(exclude = SecurityAutoConfiguration.class )

否则

@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) 
    http.authorizeExchange().anyExchange().permitAll();
    return http.build();

【讨论】:

以上是关于如何使用 springfox 在 Swagger UI 中绕过授权的主要内容,如果未能解决你的问题,请参考以下文章

Springfox与SpringDoc——swagger如何选择(SpringDoc入门)

如何在 Springfox Swagger 提供的 Swagger /v2/api-docs 中启用 CORS 标头?

如何复写 springfox swagger2controller

springfox-swagger-ui3的基本使用

如何更改 Springfox Swagger 2.0 的 basePath

使用springfox+swagger2书写API文档(十八)