温馨提示×

debian swagger如何启用鉴权

小樊
43
2026-10-04 16:53:52
栏目: 智能运维

在 Debian 上“启用 Swagger 鉴权”通常指两件事之一:

  1. Swagger UI 本身需要登录/鉴权才能访问(保护 Swagger 文档)
  2. Swagger 中定义的 API 需要携带 Token / API Key / OAuth2 才能调用

下面按常见场景说明(以 Spring Boot + Swagger / springdoc-openapi 为例,Debian 只是运行环境,不影响配置)。


一、Swagger UI 本身启用鉴权(保护文档)

方式 1:Spring Security 保护 Swagger 路径

@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 时会要求输入用户名密码。


方式 2:Nginx 反向代理 + Basic Auth(Debian 常用)

location /swagger-ui/ {
    auth_basic "Swagger";
    auth_basic_user_file /etc/nginx/swagger.htpasswd;
    proxy_pass http://127.0.0.1:8080;
}

生成密码:

sudo apt install apache2-utils
htpasswd -c /etc/nginx/swagger.htpasswd admin

二、Swagger 中 API 启用鉴权(Token / Bearer)

1. Springdoc OpenAPI(Swagger 3)

@Bean
public OpenAPI customOpenAPI() {
    return new OpenAPI()
        .components(new Components()
            .addSecuritySchemes("bearerAuth",
                new SecurityScheme()
                    .type(SecurityScheme.Type.HTTP)
                    .scheme("bearer")
                    .bearerFormat("JWT")))
        .addSecurityItem(new SecurityRequirement().addList("bearerAuth"));
}

Swagger UI 会出现 Authorize 按钮,输入:

Bearer xxx.yyy.zzz

2. 旧版 Swagger 2(Springfox)

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
        .securitySchemes(List.of(apiKey()))
        .securityContexts(List.of(securityContext()));
}

private ApiKey apiKey() {
    return new ApiKey("JWT", "Authorization", "header");
}

三、OAuth2 鉴权(Swagger UI)

.addSecuritySchemes("oauth2",
    new SecurityScheme()
        .type(SecurityScheme.Type.OAUTH2)
        .flows(new OAuthFlows()
            .authorizationCode(new AuthorizationCodeOAuthFlow()
                .authorizationUrl("https://auth.example.com/oauth2/authorize")
                .tokenUrl("https://auth.example.com/oauth2/token"))))

四、Debian 部署注意事项

  • Swagger 只是文档,生产环境建议关闭或加鉴权
  • 关闭示例:
springdoc.swagger-ui.enabled=false

或

springfox.documentation.swagger.v2.path=/internal-api-docs

如果你能补充说明:

  • 用的是 Swagger 2 还是 OpenAPI 3
  • 框架是 Spring Boot / Node / Python
  • 想保护 Swagger UI 还是 API 调用

我可以给你更精确的 Debian 配置示例。

0 踩