目录
一、理论部分
简介
如何通过认证
API 鉴权
配置API放行
细颗粒度鉴权配置
结尾
二、实战部分
一、理论部分
简介
- Secure 基于 JWT 封装,每次请求的时候,会拦截到需要鉴权的API请求,并对其请求头携带的Token进行认证。
- 若 Token 过期、不存在、错误,都会导致鉴权失败,继而无法访问到对应的API。
- SpringBlade 的安全框架 Secure 在 Blade-Tool 中
- 本章介绍 Secure 的基本使用方法。
如何通过认证
- 首先需要访问Auth接口,传入账号名密码,获得授权成功后的信息
- 启动
AuthApplication
、UserApplication
、BladeLogApplication
三个服务 - 调用 http://localhost/blade-auth/token 传入对应参数,如下图所示则说明认证信息获取成功
("c3dvcmQ6c3dvcmRfc2VjcmV0"为clientId:clientSecret串转换为的base64编码,这个是可变的)
4.从返回的Json中取到 tokenType
和 accessToken
,将他们拼接起来并以逗号隔开
5.设置请求头为blade-auth
,请求头对应的值为 tokenType
+ ' '
+ accessToken
(后续的所有接口调用都需要带上请求头为 Authorization
值为 c3dvcmQ6c3dvcmRfc2VjcmV0
)
6.再次调用 http://localhost/blade-demo/api/info?name=Chill 发现返回 Hello, My Name Is: Chill
说明鉴权成功!
7.理论上看,所有业务API,都需要进行鉴权,这样才能保证整个系统的安全性,但也有个别特例情况,API 不需要认证也可以调用,这里就需要用到 Secure 的 API 放行配置。
8.有些业务 API 鉴权就算成功,也有可能需要根据角色权限来判断是否可以调用,这里就需要用到 Secure更细颗粒度的鉴权配置。
扩展:密码可能会进行二次加密
如这一个admin就是md5加密后
将得到的Authorization、Blade-Auth填入
(请求参数Params中填name:vulue即可)
API 鉴权
配置API放行
- 若是使用SpringBoot版本,前往对应配置文件,增加接口放行配置
2.若是使用SpringCloud,则打开nacos,找到对应配置文件增加接口放行配置
3.若需要拦截某个api下所有的请求,则可以改为 /api/**
, 其中 **
则代表下层所有请求
4.重启工程,去掉请求头,可以看到,请求成功了,说明 API 放行
配置成功
细颗粒度鉴权配置
- 鉴权配置用到了 Secure 模块的
@PreAuth
注解 - 为了可以起到对比的作用,对
count
进行权限放行(只要通过Token认证就可调用API)。
@GetMapping("count")
@PreAuth("permitAll()")
public Integer count(Integer cnt) {
return cnt * 10;
}
3.对 info
进行权限判断,调用方需要拥有test
的角色权限才可以调用
@GetMapping("info")
@PreAuth("hasRole('test')")
public String info(String name) {
return "Hello, My Name Is: " + name;
}
4.调用 /api/count
发现请求成功。
5.调用 /api/info
发现又变回了 请求未授权
,因为我们的admin
账号没有分配test
角色
6.尝试改回admin
权限
@GetMapping("info")
@PreAuth("hasRole('administrator')")
public String info(String name) {
return "Hello, My Name Is: " + name;
}
7.调用 /api/info
发现请求成功。
结尾
- Secure 框架进行了两层 API 鉴权。
- 第一层校验请求携带的Token是否合法,不需要Token校验的可通过配置放行。
- 第二层校验
@PreAuth
配置的逻辑是否符合,若不符合也返回请求未授权
。 - 注解
@PreAuth
支持类层级和方法层级,放到类层级则对该类的所有方法进行鉴权。 - 注解
@PreAuth
还支持 Spring el 表达式,可拓展性非常高,更多功能等您挖掘~ - Spring el 文档地址:Spring Framework Reference Documentation
二、实战部分
更多请参考springBlade开发手册:
https://www.kancloud.cn/smallchill/blade/