在 Debian 上部署的 Swagger(通常指 Swagger UI / Swagger Editor / Springdoc、Swagger2 等),“鉴权”一般分两种场景:
下面按常见方案说明。
适合:Swagger UI 由 Nginx 静态托管或通过反向代理
sudo apt install nginx apache2-utils
创建密码文件:
sudo htpasswd -c /etc/nginx/swagger_passwd admin
Nginx 配置:
server {
listen 80;
server_name swagger.example.com;
location / {
auth_basic "Swagger Auth";
auth_basic_user_file /etc/nginx/swagger_passwd;
proxy_pass http://127.0.0.1:8080;
}
}
sudo nginx -t
sudo systemctl restart nginx
✅ 访问 Swagger 需要账号密码
适合:Springdoc / Swagger2
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/swagger-ui/**", "/v3/api-docs/**").authenticated()
.anyRequest().permitAll()
)
.httpBasic(Customizer.withDefaults());
return http.build();
}
}
Swagger UI 加“Authorize”按钮:
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.components(new Components()
.addSecuritySchemes("bearer",
new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("bearer")
.bearerFormat("JWT")))
.addSecurityItem(new SecurityRequirement().addList("bearer"));
}
.addSecuritySchemes("apiKey",
new SecurityScheme()
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.name("X-API-KEY"))
.addSecuritySchemes("oauth2",
new SecurityScheme()
.type(SecurityScheme.Type.OAUTH2)
.flows(new OAuthFlows()
.authorizationCode(new OAuthFlow()
.authorizationUrl("https://auth.example.com/oauth2/authorize")
.tokenUrl("https://auth.example.com/oauth2/token"))))
✅ 生产环境 不要直接暴露 Swagger
Spring Boot:
springdoc:
swagger-ui:
enabled: false
| 场景 | 推荐方案 |
|---|---|
| 内部 API 文档 | Nginx Basic Auth |
| 对外 API | OAuth2 + 不暴露 Swagger |
| 微服务 | Spring Security + JWT |
| 临时演示 | 本地运行,不部署 |
如果你能告诉我:
我可以给你 精准配置示例。