gpt4 book ai didi

java - 使用 Swagger UI 的基本身份验证

转载 作者:行者123 更新时间:2023-11-29 04:06:46 27 4
gpt4 key购买 nike

我正在尝试通过 Swagger UI 使用 API 文档开发基于 spring-boot 的 rest API 服务。我想通过 swagger UI 启用基本身份验证,以便用户只能在他/她使用 swagger UI 上的授权按钮进行身份验证后运行 API(通过该按钮添加 "authorization: Basic XYZ header 到 API 调用

在前端(在 Swagger UI 的 .json 文件中,我使用以下代码(根据文档)为所有 API 添加了基本身份验证:

"securityDefinitions": {
"basic_auth": {
"type": "basic"
}
},
"security": [
{
"basic_auth": []
}
]

我应该如何为上述用例实现后端逻辑(用户只能在他/她使用 swagger UI 上的授权按钮进行身份验证后运行 API,否则在运行 API 时会显示 401 错误)

相同的一些文档或示例代码会有所帮助

最佳答案

一种选择是使用浏览器弹出授权

  1. 当您为 spring boot 应用程序启用基本身份验证时,swagger ui 将自动使用浏览器的弹出窗口以将其用于基本身份验证。这意味着浏览器将保留用于发出请求的凭据,就像您尝试访问安全的 GET 端点时一样,直到您关闭它。

现在,假设您不想使用上面的内容,并且想要 swagger-ui 进行基本身份验证,您必须在 swagger-ui 上启用身份验证功能并可选择添加安全异常(exception)访问 swagger-ui url 时。

  1. 要启用 swagger UI 的基本身份验证功能(使用 UI 中的“授权按钮”),您必须为 Swagger Docket 设置安全上下文和方案(这是一个简化版本):

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig implements WebMvcConfigurer{

    @Bean
    public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
    .select()
    .apis(RequestHandlerSelectors.any())
    .paths(PathSelectors.any())
    .build()
    .securityContexts(Arrays.asList(securityContext()))
    .securitySchemes(Arrays.asList(basicAuthScheme()));
    }

    private SecurityContext securityContext() {
    return SecurityContext.builder()
    .securityReferences(Arrays.asList(basicAuthReference()))
    .forPaths(PathSelectors.ant("/api/v1/**"))
    .build();
    }

    private SecurityScheme basicAuthScheme() {
    return new BasicAuth("basicAuth");
    }

    private SecurityReference basicAuthReference() {
    return new SecurityReference("basicAuth", new AuthorizationScope[0]);
    }

    }

这会启用 ui 中的授权按钮。 enter image description here

现在您可能希望您的用户自由访问 swagger-ui 并使用此按钮进行授权。为此,您必须免除 swagger 应用程序的基本身份验证。此配置的一部分是安全配置,您必须添加以下代码:

public class SecurityConfig extends WebSecurityConfigurerAdapter{

@Override
protected void configure(HttpSecurity http) throws Exception {

http
.httpBasic()
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and().authorizeRequests()
.antMatchers(
"/", "/csrf",
"/v2/api-docs",
"/swagger-resources/**",
"/swagger-ui.html",
"/webjars/**"
).permitAll()
.anyRequest().authenticated();

}
}

关于java - 使用 Swagger UI 的基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58110036/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com