溫馨提示×

Swagger如何在Linux實現安全認證

小樊
83
2025-04-13 03:48:34
欄目: 智能運維

在Linux上實現Swagger的安全認證,通常涉及到對API文檔訪問權限的控制,確保只有經過認證的用戶才能查看或操作API文檔。這可以通過多種方式實現,例如使用基本認證、OAuth2、JWT等。以下是基于Spring Boot和Springdoc(用于生成OpenAPI文檔的工具)實現安全認證的一些步驟:

1. 引入依賴

首先,需要在你的Spring Boot項目中引入springdoc-openapi-starter-webmvc-ui依賴,這是Springdoc提供的用于集成Swagger UI和OpenAPI文檔的工具。

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.1.0</version>
</dependency>

2. 配置認證機制

Springdoc支持多種認證機制,包括OAuth2和JWT。以下是一個基本的配置示例,展示如何在Spring Boot應用中啟用OAuth2認證:

import io.swagger.v3.oas.annotations.security.Security;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Security(name = "oauth2", securitySchemes = {
        @SecurityScheme(name = "oauth2", type = SecurityScheme.Type.OAUTH2, flows = {
                @SecurityFlow(name = "authorizationCode", authorizationUrl = "/oauth/authorize", tokenUrl = "/oauth/token")
        })
})
public class SecurityConfig {

    @Bean
    public SecurityRequirement securityRequirement() {
        return new SecurityRequirement().securitySchemes(Collections.singletonList(securityScheme())).securityContexts(Collections.singletonList(securityContext()));
    }

    @Bean
    public SecurityScheme securityScheme() {
        return new OAuth("oauth2", Collections.singletonList(new AuthorizationScope("read", "read access")), Collections.singletonList(new GrantType("authorization_code", new AuthorizationCodeUrl("/oauth/authorize"), new TokenUrl("/oauth/token"))));
    }

    @Bean
    public SecurityContext securityContext() {
        return SecurityContext.builder()
                .securityReferences(defaultAuth())
                .forPaths(PathSelectors.any())
                .build();
    }

    private List<AuthorizationScope> defaultAuth() {
        return Collections.singletonList(new AuthorizationScope("read", "read access"));
    }
}

3. 配置application.properties

application.properties文件中,可以配置OAuth2相關的參數,例如客戶端ID和客戶端密鑰:

springdoc.security.oauth2.client-id=your-client-id
springdoc.security.oauth2.client-secret=your-client-secret
springdoc.security.oauth2.token-url=/oauth/token

4. 訪問受保護的Swagger UI

配置完成后,訪問Swagger UI時,系統會提示用戶進行認證。用戶需要先通過OAuth2授權流程獲取訪問令牌,然后在Swagger UI中使用該令牌進行認證。

5. 使用JWT進行認證(可選)

除了OAuth2,還可以使用JWT進行認證。JWT通常與Spring Security結合使用,可以在控制器方法上添加安全注解來保護API:

import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
@Tag(name = "Protected API")
public class ProtectedController {

    @GetMapping("/secure")
    public String secureEndpoint() {
        return "This is a secure endpoint";
    }
}

在Spring Security配置中,需要添加對Swagger UI端點的保護:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth.jwt.JwtDecoder;
import org.springframework.security.oauth.jwt.NimbusJwtDecoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests(authorizeRequests ->
                authorizeRequests
                    .antMatchers("/swagger-ui/**", "/v2/api-docs/**").permitAll()
                    .anyRequest().authenticated()
            )
            .oauth2ResourceServer(oauth2 ->
                oauth2
                    .jwt(jwt ->
                        jwt.decoder(jwtDecoder())
                    )
            );
    }

    @Bean
    public JwtDecoder jwtDecoder() {
        return NimbusJwtDecoder.withJwkSetUri("https://your-auth-server/.well-known/jwks.json").build();
    }
}

通過上述步驟,可以在Linux系統上使用Swagger實現安全認證,確保API文檔的訪問受到保護。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女