当前位置: 首页 > 知识库问答 >
问题:

如何在Spring启动应用程序的 Swagger API 中提供身份验证

潘自强
2023-03-14

我已经集成了Swagger,以便使用SpringBoot为SpringREST应用程序生成API文档。它工作得很好,当我点击URL时,我可以看到生成的API文档:http://localhost:8080/test/swagger-用户界面。html我的问题是如何限制对API的访问?基于硬编码用户名和密码的基本身份验证应该足够好,至少从一开始就足够了。我使用maven添加了“swagger2”依赖项。

这是绒球.xml:

<dependency>                                                                           
    <groupId>io.springfox</groupId>                                                      
    <artifactId>springfox-swagger2</artifactId>                                          
    <version>2.7.0</version>                                                             
</dependency>                                                                          
<dependency>                                                                           
    <groupId>io.springfox</groupId>                                                      
    <artifactId>springfox-swagger-ui</artifactId>                                        
    <version>2.7.0</version>                                                             
</dependency>  

以下是swagger配置:

@Configuration                                                                         
@EnableSwagger2                                                                        
public class SwaggerConfig {                                                           
    @Bean                                                                              
    public Docket api() {                                                              
        return new Docket(DocumentationType.SWAGGER_2)                                 
          .select()                                                                    
          .apis(RequestHandlerSelectors.basePackage("com.eeocd.test.ws.resource"))     
          .build();                                                                    
    }                                                                                  
}                                                                                      

共有1个答案

魏成济
2023-03-14

您可以通过向Docket对象添加securityScheme和securityContext来启用身份验证。

@Configuration                                                                         
@EnableSwagger2                                                                        
public class SwaggerConfig {                                                           
    @Bean                                                                              
    public Docket api() {                                                              
        return new Docket(DocumentationType.SWAGGER_2)                                 
          .select()                                                                    
          .apis(RequestHandlerSelectors.basePackage("com.eeocd.test.ws.resource"))     
          .build()
          .securitySchemes(newArrayList(basicAuth()))
          .securityContexts(newArrayList(securityContext()));                                                                    
    }
private BasicAuth basicAuth() {
    BasicAuth ba = new BasicAuth("basic");
    return ba;
}

private SecurityContext securityContext() {
    return SecurityContext.builder()
            .securityReferences(defaultAuth())
            .forPaths(apiPaths())
            .build();
}

private List<SecurityReference> defaultAuth() {
    AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
    AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
    authorizationScopes[0] = authorizationScope;
    return newArrayList(new SecurityReference("basic", authorizationScopes));
}



private Predicate<String> apiPaths() {
        return or(regex("/api/v1.*")
        );

    }

} 
 类似资料:
  • 现在,我们有了集成执行器。我希望我的执行器endpoint可以通过基本认证在浏览器中访问。 为此,我用@order(1)添加了WebSecurityConfigurerAdapter的一个实现。它在浏览器上工作得很好。但是,当我从angualar应用程序调用登录url时,它为/oauth/token url给出了401个未经授权的错误,因此我无法从ui应用程序登录。 任何帮助将感谢解决此错误。 类

  • 我实现了自己的UserDetailsService。我正在Java中配置Spring Security性。我如何创建默认身份验证提供程序与我的自定义用户服务详细信息服务和一些密码编码器? 但是,当我运行这段代码时,我有异常: 我想我做错了什么

  • 我已经创建了身份提供程序,并且从浏览器中它工作正常。 参考:密钥斗篷身份提供程序后代理登录抛出错误 从浏览器,我可以使用外部IDP登录,如果外部IDP用户不在keycloak中,它会在keyclock中创建,这绝对没问题,并重定向到仪表板。 但我的问题是,我们如何用keycloak rest api实现这个流程? 是否有任何api用于使用外部IDP登录,并将获得外部IDP的令牌以及密钥斗篷的令牌?

  • 我有一个Spring应用程序,它使用Kafka实例而没有任何身份验证。 现在故事发生了变化,Kafka离开了应用程序并作为集群运行。我收到了Kafka凭据用户名和密码以及主机名:端口信息。 其他信息,我需要连接到Kafka集群。 是否需要进行任何代码更改?还是我只需要在应用程序配置文件.yaml文件中添加一些信息? 我尝试了Google中建议的不同方法,但似乎对我没有任何效果,我一直收到: 错误:

  • 我希望我的web应用程序的用户通过LDAP和额外的自定义身份验证进行身份验证。这是一个用Kotlin编写的Spring Boot应用程序。我将AuthenticationManagerBuilder配置为 我希望链接身份验证,以便如果CustomAuthenticationProvider成功地进行身份验证(函数authenticate不抛出),身份验证将继续使用LDAP身份验证提供程序。 正如所

  • 我的问题是,我希望有两个身份验证提供商 之前:我有我的UserDetailServiceImpl,我根据数据库中的数据验证了用户的身份(不确定是哪个提供者) 现在:我使用了ActiveDirectoryLdapAuthentiation提供程序,如下所示 我成功了,所以我可以认证。 问题是: 我现在无法再使用数据库用户登录,现在只有LDAP。 未使用UserDetailsService,因此用户具