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

news2024/11/20 1:35:31

目录

一、理论部分

简介

如何通过认证

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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Js时间倒计时

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼推荐系列:点击进入 &#…

vue 0-1搭建项目

vue 从0-1搭建项目 前提:进入到需要创建项目的文件夹中,打开命令行窗口 windowsr 打开命令行窗口 创建vue2.0项目: 自动创建 1.vue create 项目名称 仅包含3个功能:vue2/3,babel,eslint 手动创建 1.vue create 项目名…

ModaHub魔搭社区:详解向量数据库Milvus的Mishards:集群分片中间件(五)

目录 在 Kubernetes 中部署 Mishards 集群 安装前提 安装流程 卸载 Mishards 从单机升级到 Mishards 集群 注意事项 基本案例 在 Kubernetes 中部署 Mishards 集群 安装前提 Kubernetes 版本 1.10 及以上Helm 版本 2.12.0 及以上 关于 Helm 的使用请参考 Helm 使用指…

【python入门系列】第一章:Python基础语法和数据类型

文章目录 前言一、简单语法1. 注释 这是一个单行注释2. 变量 二、数据类型1.字符串2.整数3.浮点数4.布尔值5.列表 三、运算符1.算术运算符:用于执行基本的算术操作,如加、减、乘和除。2.比较运算符:用于比较两个值的大小或相等性。3.逻辑运算…

01.网络编程-基础概念

网络编程就是指编写互联网项目,项目可以通过网络传输数据进行通讯 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的 1.1 软件结构…

Oracle 11g安装配置完美教程 - Windows

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

用Java解决华为OD机试考题,目标300+真题,清单奉上,祝你上岸

华为OD机考大纲 其它语言版本华为 OD 机试题清单(机试题库还在逐日更新)详细大纲 其它语言版本 本目录为华为od机试JS题解目录,其它版本清单如下 ⭐️华为OD机考 Python https://blog.csdn.net/hihell/category_12199275.html ⭐️华为OD机考…

BOSHIDA DC电源模块低温试验检测详细分析

BOSHIDA DC电源模块低温试验检测详细分析 DC电源模块的低温试验是电源应用领域中的一项重要测试,它可以检测模块在低温环境下的性能表现是否与设计要求相符。这是因为在一些极端环境下,电源模块的性能会受到影响,从而影响整个系统的运行稳定…

山西电力市场日前价格预测【2023-06-30】

日前价格预测 预测明日(2023-06-30)山西电力市场全天平均日前电价为362.38元/MWh。其中,最高日前价格为477.68元/MWh,预计出现在21: 15。最低日前电价为247.28元/MWh,预计出现在13: 00。以上预测仅供学习参考&#xff…

Pytorch深度强化学习(3):详解K摇臂赌博机模型和ϵ-贪心算法

目录 1 K-摇臂赌博机2 ϵ \epsilon ϵ-贪心算法3 softmax算法4 Python实现与分析 1 K-摇臂赌博机 单步强化学习是最简单的强化学习模型,其以贪心策略为核心最大化单步奖赏 如图所示,单步强化学习的理论模型是 K K K-摇臂赌博机( K K K-armed bandit)&…

内部类之成员内部类

我们在阅读源码的过程中,会遇到很多内部类,让我们阅读难度增加。这篇文章主要介绍成员内部类的作用 1.成员内部类可以访问外部类的所有方法和成员变量(不论是静态的还是非静态的) package com.high.concurrency.inner;/*** auth…

如何让chatgpt给我们实现一个桌面便签?

我: 用Java开发一款桌面便签软件。功能需求:1、便签可以钉在桌面任意角落;2、便签内容实时保存到本地;3、有新增按钮,点击新增时清除当前面板上的内容,新建一条新的便签内容,并保存到本地&#…

通往AGI之路:揭秘英伟达A100、A800、H800、V100在高性能计算与大模型训练中的霸主地位

AGI | NLP | A100 | H100 | Nvidia | Aurora GPT| LLM | A800 | V100 | Intel | ChatGPT 日前,随着深度学习、高性能计算、大模型训练等技术的保驾护航,通用人工智能时代即将到来。各个厂商也都在紧锣密鼓的布局,如英伟达前段时间发布GH 200…

C3.ai:一个即将“破灭”的人工智能泡沫

来源:猛兽财经 作者:猛兽财经 C3.ai仅适用于能承受高风险波动的投资者 猛兽财经曾在之前分析过C3.ai(AI)这家公司,认为C3.ai可能在借助人工智能热潮炒作自己。截止撰写本文时,C3.ai的股价已跌到了到2…

使用ganymed-ssh2连接linux报错 Cannot negotiate, proposals do not match

ganymed-ssh2连接linux报错 背景报错信息解决方案:运行成功 背景 最近有个项目,需要在Linux下的服务器内写了一部分Python脚本,业务处理却是在Java内,那么就想能不能在Java里面,来远程执行Linux下的Python脚本&#x…

chatgpt赋能python:使用Python连接网络摄像头

使用Python连接网络摄像头 网络摄像头是现代生活中不可或缺的设备之一,其允许用户在远程位置查看实时视频流。Python语言提供了强大的工具来连接和控制网络摄像头。本文将向您展示如何使用Python连接网络摄像头以及如何将视频流数据流式传输到本地计算机。 环境设…

【AUTOSAR】BMS开发实际项目讲解(十九)----电池管理系统系统设计电池单体过放后再充电保护

电池单体过放后再充电保护 关联的系统需求 TSR-BMS-2101、TSR-BMS-2102、TSR-BMS-2103、TSR-BMS-2104、TSR-BMS-2105、TSR-BMS-2106、TSR-BMS-2107、TSR-BMS-2108、TSR-BMS-2109、TSR-BMS-2110、TSR-BMS-2111、TSR-BMS-2112、TSR-BMS-2113、TSR-BMS-2114、TSR-BMS-2115、TSR-B…

七年老Android推荐 : 日常开发中好用的工具 (一)

1. 前言 作为一名拥有七年经验的Android开发工程师,在日常开发中,总希望能提升自己的开发效率,对此也积累了一些工具,本文对此总结了一些好用的工具。 2. 视频转GIF工具 我们在写博客的时候,常常要录屏,…

leetcode:2000. 反转单词前缀(python3解法)

难度:简单 给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。…

智云通CRM:在谈判中如何避免被客户利用的陷阱?

智云通CRM系统是一款专业的客户关系管理系统,帮助企业实现客户管理的数字化转型。在日常销售工作中,销售人员经常会面临各种问题和质疑,良好的应对技巧和回答方法对于维护好客户关系、促成交易非常重要。下面将介绍一些经常会被客户问到的问题…