还不会使用JWT格式化OAuth2令牌吗?
OAuth2默认的AccessToken是由DefaultAccessTokenConverter生成,是具有唯一性的UUID随机字符串,我们如果想要使用JWT来格式化AccessToken就需要使用JwtAccessTokenConverter来进行格式化,当然如果你有自己独特的业务可以自己实现AccessTokenConverter接口,并将实现类交付给IOC托管即可。
ApiBoot内部集成了DefaultAccessTokenConverter(默认)、JwtAccessTokenConverter,只需要一个配置就可以实现相互转换。
相关文档
- ApiBoot OAuth2官方文档:https://apiboot.minbox.org/zh-cn/docs/api-boot-oauth.html
- ApiBoot 开源源码:minbox-projects/api-boot
JWT加密秘钥
对JWT了解的同学应该知道,它内部不可逆的部分采用的是RSA加密,在加密过程中需要一个秘钥,在JwtAccessTokenConverter实现类中采用了6位随机字符串作为秘钥,相关源码如下:
1 | /** |
这种形式虽然在某一些层面上是唯一的,实在感觉不太严谨,所以ApiBoot添加一个配置,可以自定义这个加密秘钥signingKey字段。
创建示例项目
为了本章的演示效果,我们使用IDEA来创建一个SpringBoot项目,pom.xml文件内相关的依赖如下所示:
1 | <dependencies> |
依赖添加完成后下面我们配置下测试的用户以及客户端信息。
配置内存用户
我们在获取AccessToken时使用的password授权类型,所以我们需要在application.yml文件内配置登录用户所使用的用户名、密码,如下所示:
1 | api: |
本章为了演示
JWT格式化AccessToken,验证的用户采用内存方式配置,了解详情。
开启JWT转换
ApiBoot OAuth2默认使用DefaultAccessTokenConverter实现类来格式化AccessToken,如果我们想要切换到JwtAccessTokenConverter,需要在application.yml添加一个配置,如下所示:
1 | api: |
配置加密秘钥
在本文开头说到了JwtAccessTokenConverter实现类内采用的是6位随机字符串的方式来作为RSA加密的秘钥,ApiBoot OAuth2提供了参数配置可以进行自定义,如下所示:
1 | api: |
秘钥格式不限,如:
特殊字符串、汉字、数字、字母….
运行测试
见证奇迹的时刻到了,我们通过IDEA的XxxApplication方式来启动本章项目,尝试使用CURL方式获取AccessToken如下所示:
1 | ➜ ~ curl ApiBoot:ApiBootSecret@localhost:9090/oauth/token -d 'grant_type=password&username=yuqiyu&password=123456' |
ApiBoot OAuth有默认的客户端配置信息为ApiBoot、ApiBootSecret,为了方便演示,这里没做修改,如需修改请查看ApiBoot OAuth文档,如果你感觉控制台打印的json不美观,阅读性太差,可以使用在线格式化JSON工具.
敲黑板,划重点
使用ApiBoot来格式化OAuth2的AccessToken是不是特别简单?省去了我们自己去创建JwtAccessTokenConverter实例,然后还需要将实例放入IOC繁琐的步骤,更多使用详解敬请期待~~
代码示例
如果您喜欢本篇文章请为源码仓库点个Star,谢谢!!!
本篇文章示例源码可以通过以下途径获取,目录为apiboot-security-oauth-use-jwt:
还不会使用JWT格式化OAuth2令牌吗?

OAuth vs SAML vs OpenID
