当前位置: 首页 > news >正文

AK/SK加密认证

一、AK/SK概念

  1. Access Key (AK):AK是一个全局唯一的字符串标识符,用于标识用户。它类似于用户名,但仅用于身份识别,并不包含任何秘密信息。

  2. Secret Access Key (SK):SK则是一个高度保密的密钥,类似于密码,用于对发送至服务的请求进行签名。每个AK都有一个对应的SK,它们成对出现,共同完成安全认证过程。

  3. 签名算法与认证流程

    • 在AK/SK认证中,客户端使用SK对HTTP请求的内容(包括但不限于请求方法、URL路径、参数、时间戳等)进行特定的哈希运算,生成一个签名Hutool封装的签名算法。
    • 这个签名随请求一起发送到服务端,服务端收到请求后,利用存储的对应AK的SK以同样的规则计算签名,然后比较两者是否一致,以此来验证请求的完整性和发送者的身份。

二、AK/SK认证流程

  1. 创建与管理AK/SK:用户通过注册等方式等到访问密钥对(AK/SK),并下载保存。一般SK通常只在首次创建时展示一次,之后不可再查看,只能重新生成新的密钥对,也是为了保证安全

  2. 构建带有签名的请求:客户端在发起API请求前,会先根据预定义的规范(签名算法)使用SK对请求参数进行签名处理。

  3. 发送请求与鉴权:签名后的请求通过HTTP头字段(如Authorization等)携带鉴权信息发送给服务端,服务端接收到请求后,从请求头取出AK并查找出其关联的SK,然后使用此SK按照相同的签名算法生产签名,判断和客户端SK生成的签名是否一致
    我们需要获取用户传递的 accessKey 和 secretKey。对于这种数据,建议不要直接在 URL 中传递,而是选择在请求头中传递会更为妥当。因为 GET 请求的 URL 存在最大长度限制,如果你传递的其他参数过多,可能会导致关键数据被挤出。因此,建议从请求头中获取这些数据

  4. 响应与权限控制:验证通过后,服务端会执行请求的操作,并返回相应的响应内容;若签名验证失败,则拒绝请求并返回错误提示。

三、请求重放安全问题

在AK/SK认证机制中,请求重放安全问题是指攻击者截获并重复发送之前的有效请求来假冒合法用户执行操作。为了防止这种攻击,服务端需要通常采用多种策略来确保API调用的一次性和不可重放性:

  1. 时间戳和有效期:在签名过程中包含时间戳信息,并且服务端会检查该时间戳是否在一定的时间窗口内(比如几分钟)。超过这个时间范围的请求将被拒绝,这样就阻止了过期请求的重放。

  2. 唯一请求ID:为每个请求生成一个唯一的标识符,并将其纳入签名内容中。服务端会跟踪已处理过的请求ID,当收到相同的请求ID时,将拒绝处理以防止重放攻击。

  3. 序列号或nonce:使用递增的序列号或者一次性随机值nonce作为请求的一部分进行签名,服务端会验证每个新请求的序列号或nonce未被使用过。

http://www.lryc.cn/news/318573.html

相关文章:

  • 前端实现websocket通信讲解(vue2框架)
  • 解决ffmpeg播放摄像头延时的问题(项目案例使用有效)
  • Android 音频系统
  • Java必须掌握的二叉堆知识点(含面试大厂题含源码)
  • [Java、Android面试]_03_java内存管理:虚拟内存、堆、垃圾回收
  • PTA题解 --- 求整数段和(C语言)
  • virsh管理虚拟机的命令行工具
  • 数据集成平台选型建议
  • Centos8安装Docker,使用阿里云源
  • FFmpeg概念和简单使用
  • OJ_最长公共子序列
  • SpringBoot拦截器获取token用户对象优雅地传递到Controller层
  • 从零开始学HCIA之SDN03
  • C语言深度理解之——结构体内存对齐
  • LeetCode 热题 100 | 回溯(二)
  • 混合内容错误https中加载了http
  • 游戏免费下载平台模板源码
  • 鸿蒙视频播放的实现
  • QT----计算器
  • Linux:kubernetes(k8s)Deployment的操作(13)
  • 20240619-James-快速鸟瞰并发编程, 呕心沥血整理的架构技术(第3篇)
  • C语言——详解字符函数和字符串函数(一)
  • 三款内衣洗衣机的顶级较量:希亦、小吉、由利,谁才是性价比之王?
  • Java枚举多值映射应用
  • css--浮动
  • 基于有限状态机开发健壮的Nodejs/TCP客户端
  • javaEE13(网站第8章两个课后题)
  • 【Leetcode每日一题】 递归 - 反转链表(难度⭐)(35)
  • Unity基础学习
  • Java并发编程学习笔记:AQS