【SpringBlade-权限缺陷】API鉴权逻辑缺陷漏洞

目录

一、理论部分

简介

如何通过认证

API 鉴权

配置API放行

细颗粒度鉴权配置

结尾

二、实战部分


一、理论部分

简介

  • Secure 基于 JWT 封装,每次请求的时候,会拦截到需要鉴权的API请求,并对其请求头携带的Token进行认证。
  • 若 Token 过期、不存在、错误,都会导致鉴权失败,继而无法访问到对应的API。
  • SpringBlade 的安全框架 Secure 在 Blade-Tool 中
  • 本章介绍 Secure 的基本使用方法。


如何通过认证

  1. 首先需要访问Auth接口,传入账号名密码,获得授权成功后的信息
  2. 启动AuthApplicationUserApplication、 BladeLogApplication三个服务
  3. 调用 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放行

  1. 若是使用SpringBoot版本,前往对应配置文件,增加接口放行配置

2.若是使用SpringCloud,则打开nacos,找到对应配置文件增加接口放行配置

3.若需要拦截某个api下所有的请求,则可以改为 /api/**, 其中 ** 则代表下层所有请求

4.重启工程,去掉请求头,可以看到,请求成功了,说明 API 放行 配置成功



细颗粒度鉴权配置

  1. 鉴权配置用到了 Secure 模块的 @PreAuth 注解
  2. 为了可以起到对比的作用,对 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/

猜你喜欢

转载自blog.csdn.net/qq_53079406/article/details/131446758