Swagger添加BasicAuth和OAuth2.0认证

本文详细介绍如何在Swagger中配置Basic认证及OAuth2.0认证,包括修改Docket对象的securitySchemes和securityContext属性,实现安全的API文档展示。

一个没有添加认证的swagger配置类大概长这样

  @Bean
  public Docket docket() {
    return new Docket(DocumentationType.SWAGGER_2).host(swaggerHost)
        .groupName("demo")
        .apiInfo(getApiInfo())
        .select()
        //设置basePackage会将包下的所有被@Api标记类的所有方法作为api
        .apis(RequestHandlerSelectors.basePackage("com.example.web"))
        //只有标记了@ApiOperation的方法才会暴露出给swagger
        .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
        .paths(PathSelectors.any()).build();
  }

如果要添加Basic认证,只需要指定Docket的securitySchemes属性即可:

增加如下方法:

  private List<? extends SecurityScheme> securitySchemes() {
    return Arrays.asList(new BasicAuth("Authorization"));
  }

在build()后面添加:

.securitySchemes(securitySchemes());

重启后台,打开swagger-ui.html,右上角会多一个Authorization按钮,点击会出现用户名和密码的输入框。输入有效的用户密码即可完成认证。

如果当前系统采用的是oauth2.0认证方式,需同时指定Docket的securitySchemes属性和securityContext属性,添加如下代码,注意ApiKey是SecurityScheme的一个子类。

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

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

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

然后在build()后面添加:

.securitySchemes(Lists.newArrayList(apiKey()))
            .securityContexts(Arrays.asList(securityContext()));

重启后台,打开swagger-ui.html,右上角会多一个Authorization按钮,点击会出现Bearer token输入框:

value框输入Bearer+空格+你通过oauth2获取的accessToken,即可完成认证。

<think>我们正在处理用户关于Apifox如何导入Basic Auth认证的问题。根据引用内容,我们了解到Apisix网关Flask中Basic Auth的配置方式,以及Apifox用于批量验证接口鉴权。用户的需求很明确:在Apifox中设置Basic Auth认证。 步骤: 1. 打开Apifox,进入需要设置认证的接口或接口集合。 2. 在接口的“认证”配置部分,选择“Basic Auth”类型。 3. 输入用户名密码。 4. 保存并发送请求,验证是否成功。 但是,用户问的是“导入”Basic Auth认证。这里有两种理解: a) 如何将已有的Basic Auth凭证配置到Apifox的接口中(手动配置)。 b) 如何通过导入文件(如Swagger)的方式自动配置Basic Auth。 考虑到引用[3]提到Apifox可以批量验证swagger接口鉴权,我们可以推测用户可能希望从Swagger文档导入接口,并同时配置Basic Auth认证。 然而,Swagger文档本身并不存储Basic Auth的用户名密码,但可以定义安全方案(securitySchemes)。在Swagger中定义Basic Auth安全方案后,导入到Apifox时,Apifox会识别该安全方案,并允许用户输入凭证。 因此,我们分两种情况回答: 情况一:手动在Apifox的单个接口或集合中配置Basic Auth 情况二:通过导入Swagger文档(其中已定义Basic Auth安全方案)来配置 详细步骤: 情况一:手动配置 1. 在Apifox中,打开一个接口或选择一个接口集合。 2. 在接口的“认证”选项卡(或集合的“认证”设置)中,选择“Basic Auth”。 3. 在出现的输入框中填写用户名密码。 4. 保存后,该接口(或集合下的所有接口)在请求时都会自动带上Basic Auth头。 情况二:导入Swagger文档并配置Basic Auth 1. 确保Swagger文档中已经定义了Basic Auth类型的安全方案。例如,在Swagger的securitySchemes部分: ```yaml components: securitySchemes: basicAuth: type: http scheme: basic ``` 2.Swagger文档的根节点或操作节点上,声明需要使用的安全方案: ```yaml security: - basicAuth: [] ``` 3. 在Apifox中,选择“导入”->“OpenAPI/Swagger”,导入该文档。 4. 导入后,Apifox会识别到该接口需要Basic Auth认证。此时,你可以在接口的“认证”配置中看到Basic Auth选项,并且需要输入用户名密码。或者,你也可以在环境变量中设置全局的Basic Auth凭证。 注意:在Swagger中定义的安全方案不会包含具体的用户名密码,这些敏感信息需要在Apifox中手动输入。 另外,引用[1][2]分别展示了在ApisixFlask中配置Basic Auth的方式,这些可以作为后端配置的参考,但Apifox作为前端测试工具,主要关注如何设置请求的认证信息。 为了更清晰,我们给出在Apifox中手动配置的截图步骤(由于无法提供截图,用文字描述): - 步骤1:打开Apifox,选择项目中的某个接口。 - 步骤2:在接口编辑页面的顶部,找到“认证”选项卡(可能在“Headers”旁边)。 - 步骤3:在认证类型下拉框中选择“Basic Auth”。 - 步骤4:输入用户名密码(例如,用户名:foo,密码:bar)。 - 步骤5:保存接口,然后发送请求,此时在请求头中会自动生成:Authorization: Basic base64(username:password) 对于集合(多个接口): - 在项目中选择一个集合,点击集合后的“...”,选择“设置”。 - 在设置中找到“认证”选项,配置Basic Auth并保存,这样集合下的所有接口都会继承该认证配置。 如果用户已经通过Swagger导入接口,并且Swagger中定义了Basic Auth安全方案,那么导入后,Apifox会自动为这些接口添加认证要求,用户只需在接口或集合的认证配置中填写具体的用户名密码。 最后,关于引用[3],Apifox可以批量验证接口鉴权,即对多个接口进行测试,检查在没有认证信息或错误认证信息时是否返回未授权错误。用户可以在测试环境中设置不同的场景(如使用正确的Basic Auth错误的Basic Auth)来批量测试。 相关问题: 1. 如何在Apifox中设置环境变量来管理Basic Auth凭证? 2. 如何批量测试Apifox中多个接口的鉴权是否有效? 3.Swagger中如何定义Basic Auth安全方案?</think>### 如何在 Apifox 中导入 Basic Auth 认证 在 Apifox 中配置 Basic Auth 认证有两种主要方式,适用于接口调试批量测试场景: #### 方法 1:单个接口手动配置 1. **打开接口编辑界面** 选择目标接口 → 进入「认证」选项卡 2. **选择认证类型** 在认证类型下拉菜单中选择 **Basic Auth** 3. **填写凭证信息** ```plaintext Username: 输入用户名(如 "foo") Password: 输入密码(如 "bar") ``` 4. **保存并测试** 请求头会自动生成 `Authorization: Basic <Base64编码>` 字段[^1] #### 方法 2:全局配置(推荐批量操作) 1. **创建环境变量** 进入「环境管理」→ 添加变量: ```plaintext 变量名:AUTH_USER 值:foo 变量名:AUTH_PASS 值:bar ``` 2. **配置全局认证** 在项目设置中选择「全局认证」→ 添加 Basic Auth: ```plaintext Username: {{AUTH_USER}} // 引用环境变量 Password: {{AUTH_PASS}} ``` 3. **应用到所有接口** 该配置会自动应用到项目内所有接口[^3] #### 导入 Swagger 时的特殊处理 当导入包含 Basic Auth 定义的 Swagger 文件时: ```yaml components: securitySchemes: basicAuth: # 安全方案名称 type: http scheme: basic security: - basicAuth: [] # 应用认证 ``` Apifox 会自动识别该配置,您只需在「接口设置」>「安全方案」中激活 basicAuth 并填写凭证[^3]。 > **验证技巧**:使用 Apifox 的「批量测试」功能,选择多个接口后: > 1. 在运行配置中启用「继承全局认证」 > 2. 执行测试可一次性验证所有接口的鉴权状态 > 3. 查看响应状态码(401/403 表示鉴权失败)[^3] --- ### 相关问题 1. **如何在 Apifox 中实现动态 Basic Auth 凭证管理?** (例如通过环境变量切换不同账号) 2. **导入 Swagger 时 Apifox 支持哪些认证类型?** (对比 Basic Auth/OAuth2/API Key 的配置差异) 3. **如何用 Apifox 批量测试接口的鉴权漏洞?** (模拟未授权访问凭证泄露场景) 4. **Basic Auth 与 Digest Auth 在 Apifox 中的配置有何不同?** (参考 Flask 的摘要认证实现[^2]) [^1]: Apisix 网关中 basic-auth 插件的配置示例,展示了基础认证的数据结构 [^2]: Flask 实现 Basic Auth 的代码示例,包含密码验证逻辑 [^3]: Apifox 批量验证接口鉴权的方法,支持通过 Swagger 导入自动化测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alphathur

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值