Swagger2怎么整合OAuth2来在线调试接口?

简介: `Swagger2`作为侵入式文档中比较出色的一员,支持接口认证的在线调试肯定是不在话下的,当我们在调用`OAuth2`所保护的接口时,需要将有效的`AccessToken`作为请求`Header`内`Authorization`的值时,我们才拥有了访问权限,那么我们在使用`Swagger`在线调试时该设置`AccessToken`的值呢?

前言

Swagger2作为侵入式文档中比较出色的一员,支持接口认证的在线调试肯定是不在话下的,当我们在调用OAuth2所保护的接口时,需要将有效的AccessToken作为请求HeaderAuthorization的值时,我们才拥有了访问权限,那么我们在使用Swagger在线调试时该设置AccessToken的值呢?

本文所需ApiBoot相关链接:

创建示例项目

在之前文章「使用Swagger2作为文档来描述你的接口信息」我们已经讲到了使用Swagger2来简单的描述接口,提供可视化在线的接口文档,我们本章的主要目的是来集成使用OAuth2实现在线调试接口,我们把之前章节测试的接口UserController复制到本篇文章中以便于测试,本章项目pom.xml依赖如下所示:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.minbox.framework</groupId>
    <artifactId>api-boot-starter-swagger</artifactId>
  </dependency>
  <dependency>
    <groupId>org.minbox.framework</groupId>
    <artifactId>api-boot-starter-security-oauth-jwt</artifactId>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.minbox.framework</groupId>
      <artifactId>api-boot-dependencies</artifactId>
      <version>2.2.1.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

如果你看过ApiBoot SecurityApiBoot OAuth你应该知道,通过application.yml文件简单的几行配置就可以集成Spring Security整合OAuth2,本章来使用内存方式配置用户列表以及客户端列表

ApiBoot Security & ApiBoot OAuth组件使用系列文章: https://blog.minbox.org/apiboot-all-articles.html

如果你想深入的了解这个神奇的ApiBoot安全组件,可以通过依赖文章汇总链接学习。

启用ApiBoot Swagger

通过@EnableApiBootSwagger注解来启用ApiBoot Swagger相关功能,在XxxApplication入口类配置如下所示:

@SpringBootApplication
@EnableApiBootSwagger
public class ApibootSwaggerIntegratedOauthApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApibootSwaggerIntegratedOauthApplication.class, args);
    }

}

配置ApiBoot Security

使用grant_type=password获取AccessToken时,需要我们传递用户的usernamepassword,使用默认的内存方式配置我们只需要在application.yml文件内添加如下配置:

api:
  boot:
    security:
      # 配置安全用户列表
      users:
        - username: yuqiyu
          password: 123123
      # 资源保护路径前缀,默认为/api/**
      auth-prefix: /**

配置ApiBoot OAuth

我们来添加OAuth2所需要的客户端列表配置信息,使用默认的内存方式配置客户端的client-idclient-secret,只需要修改application.yml文件内容如下所示:

api:
  boot:
    oauth:
      # 配置OAuth客户端列表
      clients:
        - clientId: minbox
          clientSecret: chapter

了解资源文件排除拦截

Swagger2可视化界面有很多静态资源组成,比如:js/css/images等,而集成Spring Security后这些资源需要排除权限拦截才可以访问到,如果是使用传统的方式整合Spring Security,需要使用WebSecurity来进行忽略路径才可以,而通过ApiBoot Security则是不用考虑这一点,在内部已经对Swagger的静态资源文件做出了排除。

运行测试

通过Application方式启动本章项目,Swagger可视化界面访问:http://localhost:8080/swagger-ui.html

获取AccessToken

通过CURL方式获取用户:yuqiyu的请求令牌,如下所示:

➜ ~ curl -X POST minbox:chapter@localhost:8080/oauth/token -d 'grant_type=password&username=yuqiyu&password=123123'
{"access_token":"304676a4-b9a6-4c4d-af40-e439b934aba8","token_type":"bearer","refresh_token":"ee2b5744-6947-4677-862e-fcf9517afca5","expires_in":7199,"scope":"api"}

Swagger在线调试

我们把获取的AccessToken与类型进行组合成:Bearer 304676a4-b9a6-4c4d-af40-e439b934aba8,将该令牌字符串配置到Swagger界面上,如下图所示:

apiboot-swagger-integrated-oauth-1.png

输入后点击Authorize按钮即可。

敲黑板,划重点

Swagger的在线调试其实内部是模拟发送请求,将界面上输入的参数进行组合装配,发送到需要测试的接口路径,而上图设置AccessToken,也是一个临时保存,刷新页面就会丢失,发送请求时会自动追加到Request Header列表内。

代码示例

如果您喜欢本篇文章请为源码仓库点个Star,谢谢!!!
本篇文章示例源码可以通过以下途径获取,目录为apiboot-swagger-integrated-oauth

相关文章
|
5月前
|
API
支付系统38-----支付宝支付---统一收单线下交易查询 第一步下单------》发起支付请求,登录,确认支付,查单接口开发,swagger接口全部呈现,
支付系统38-----支付宝支付---统一收单线下交易查询 第一步下单------》发起支付请求,登录,确认支付,查单接口开发,swagger接口全部呈现,
swagger接口需要权限验证解决方案
当我们在使用swagger的情况下,经常会遇到需要授权或者请求带有token才可以访问接口,这里我们就是解决授权问题。
339 0
|
移动开发 Java API
微服务技术系列教程(26) - SpringCloud- 接口管理Swagger
微服务技术系列教程(26) - SpringCloud- 接口管理Swagger
168 0
|
5月前
|
JSON 数据格式
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
MysbatisPlus-核心功能-IService开发基础业务接口,MysbatisPlus_Restful风格,新增@RequestBody指定是为了接收Json数据的,使用swagger必须注解
|
7月前
Swagger基本使用与RestTemplate发送http接口测试
Swagger基本使用与RestTemplate发送http接口测试
83 1
|
7月前
|
开发框架 JSON .NET
初学者不会写接口怎么办?微软Visual Studio 2022无脑式API接口创建——Swagger一键导入APIKit快速测试
初学者不会写接口怎么办?微软Visual Studio 2022无脑式API接口创建——Swagger一键导入APIKit快速测试
386 0
|
7月前
|
XML API 数据库
七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置
132 0
使用Swagger 让某些接口不显示在文档
使用Swagger 让某些接口不显示在文档
98 0
|
搜索推荐 Java 测试技术
Swagger与knife4j接口测试工具
Swagger与knife4j接口测试工具
183 0
|
Java 程序员 API
SpringBoot项目使用Swagger2接口工具
使用RESTful服务通常是涉及到多个终端的团队,比如Android、iOS、WEB等。为了让大家沟通顺畅,通常我们需要编写一份详细的RESTful业务接口文档
116 0