API 签名认证:AK(Access Key 访问密钥)和 SK(Secret Key 私密密钥)

API签名认证

在当今的互联网时代,API作为服务与服务、应用程序与应用程序之间通信的重要手段,其安全性不容忽视。你是否遇到过需要在HTTP请求中加入访问密钥(ak)和私密密钥(sk)的情况?是不是担心这些敏感信息会被拦截或者泄露?本文将为你解答这些疑惑,并介绍一种有效的API签名认证方法。

在这里插入图片描述

什么是AK和SK?

在云计算和API服务中,AK(Access Key 访问密钥)和 SK(Secret Key 私密密钥)是一对密钥,用于在用户和服务提供商之间进行安全认证。

  • AK(Access Key):这是一个公开的标识符,用于识别和区分不同的用户。它类似于你在银行使用的银行卡磁条上的唯一标识。服务提供商在用户注册时生成AK,并且它必须随每个请求一起发送,以便服务提供商能够识别发起请求的用户。

  • SK(Secret Key):这是一个保密的密钥,用于验证发起请求的用户身份。它可以看作是你在银行使用的PIN码,只有你自己知道。服务提供商在用户注册时生成SK,并且它不应该随请求发送,而是用于对请求进行签名,以确保请求的完整性和真实性。

首先,我们必须将 AK 和 SK 放入请求头中,但是密码 SK 绝对不能以明文形式传递。这就需要我们对密码进行加密,即所谓的签名。

加密算法有哪些?

在选择加密算法时,我们有单向加密、对称加密和非对称加密三种选择。

值得注意的是,md5的安全性较低,因此建议使用更为安全的SHA-256等算法。

签名的生成与验证

用户通过HTTP请求头中加入加密信息,浏览器会使用相同的参数进行签名生成,并与传递的参数进行对比,以确认其一致性。

以SHA-256算法为例,签名生成过程如下:

  1. 将请求的URL、请求方法、请求头、请求体等参数按照一定顺序拼接成一个字符串。
  2. 使用SHA-256算法对拼接后的字符串进行加密,得到签名。
  3. 将生成的签名放入请求头中,随请求一起发送给服务器。

服务器接收到请求后,会按照相同的参数和顺序,使用相同的SHA-256算法对请求进行签名生成。然后,服务器将生成的签名与请求头中传递的签名进行对比,以验证请求的完整性和真实性。如果两个签名一致,服务器认为请求是合法的;否则,拒绝该请求。

为什么需要AK和SK?

  1. 安全性:AK和SK提供了一种安全的方式来验证请求者的身份,确保只有拥有正确AK和SK的用户才能访问服务。由于SK是保密的,即使请求被拦截,攻击者也无法使用SK来仿造合法请求。

  2. 身份认证:服务提供商使用AK来识别请求者,而SK则用来证明请求者的身份。这种认证机制类似于我们在现实生活中使用的身份证或护照,既有身份证明,也有私密凭证。

  3. 防止滥用:AK和SK的使用可以帮助服务提供商跟踪资源的使用情况,防止未授权的访问和滥用服务。

  4. 请求签名:在发送请求时,用户会使用SK对请求进行签名。签名是一个经过特定算法处理(如HMAC-SHA-256)的请求消息,用于验证请求的完整性和来源。服务提供商收到请求后,会使用相应的SK对签名进行验证,以确保请求是合法和未被篡改的。

如何防止重放攻击?

重放攻击是指攻击者篡改并重新发送用户的请求,以此达到欺骗服务器的目的。为了防止这种攻击,我们可以:

  1. 加入随机数:后端只接受并认可该随机数一次。如果发现有相同随机数,后端会认识到该请求已经被处理过,不会再次进行处理。但这种方法的不足之处在于,需要后端额外开发来保存已使用的随机数,对于并发量大的情况,还需要其他机制来定期清理已使用的随机数。

  2. 携带时间戳:后端验证时间戳是否在指定时间范围内,比如不超过5或10分钟。控制随机数的过期时间。后端会同时验证这两个参数,只要时间戳或者随机数被使用过,就会拒绝该请求。

所以,在标准的签名认证算法中,建议至少添加以下五个参数:aceessKey、secretKey、sign、nonce(随机数)和 timestamp(时间戳),此外,建议将用户请求的其它参数,如接口中的name请求,也添加到签名中,以增加安全性。

总结

总的来说,签名认证的本质是确保密码不在服务器之间传输,避免任何可能的泄露风险。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【多线程】乐观/悲观锁、重量级/轻量级锁、挂起等待/自旋锁、公平/非公锁、可重入/不可重入锁、读写锁

文章目录 乐观锁和悲观锁重量级锁和轻量级锁挂起等待锁和自旋锁公平锁和非公平锁可重入锁和不可重入锁读写锁相关面试题 锁:非常广义的概念,不是指某个具体的锁,所有的锁都可以往这些策略中套 synchronized:只是市面上五花八门的锁…

[独家原创]基于分位数回归的Bayes-GRU多变量时序预测【区间预测】 (多输入单输出)Matlab代码

[独家原创]基于分位数回归的Bayes-GRU多变量时序预测【区间预测】 (多输入单输出)Matlab代码 目录 [独家原创]基于分位数回归的Bayes-GRU多变量时序预测【区间预测】 (多输入单输出)Matlab代码效果一览基本介绍程序设计参考资料 效…

RM麦轮控制以及底盘解算

一个典型的RM机器人四轮底盘由电机,底板,悬挂等构成,底盘安装在底盘的四角,呈矩形分布,麦克纳姆轮的辊子方向会影响其运动性能,一般采用如下图所示,四个麦轮的辊子延长线都过底盘中心的安装方法…

c语言学习,atoi()函数分析

1:atoi() 函数说明: 检查参数*ptr,子串中数字或正负号,遇到非数字或结束符停止 2:函数原型: int atoi(const char *ptr) 3:函数参数: 参数c,为检测子串 4:…

MyBatis 配置与测试方式

目录 一,什么是MyBatis 二,准备工作 创建项目 配置数据库连接 持久层代码 单元测试 一,什么是MyBatis 简单来说,MyBatis 是一款优秀的持久层框架,用于简化JDBC的开发,能更简单完成程序与数据库之间…

从0到1,AI我来了- (5)大模型-本地知识库-I

一、下载&安装Ollama Ollama下载地址: Download Ollama on macOS Github地址:GitHub - ollama/ollama: Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models. Ollama 是啥? 是一个人工智能和机器学习…

一文搞懂后端面试之不停机数据迁移【中间件 | 数据库 | MySQL | 数据一致性】

数据迁移方面的工作: 重构老系统:使用新的表结构来存储数据单库拆分分库分表、分库分表扩容大表修改表结构定义 数据备份工具 MySQL上常用的两款数据备份工具:mysqldump和XtraBackup mysqldump:一个用于备份和恢复数据库的命令…

Redis中的set类型

set的含义 集合设置(和get相对应) 集合就是把一些有关联的数据放到一起 集合中的元素是无序的(和list的有序是对应的-顺序很重要,这里的无序就是顺序不重要);在list中[]1,2,3],[1,3,2],是两个…

Java开发工具IDEA

IDEA概述 Intellij IDEA IDEA全称Intellij IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。 集成环境 把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。 IDEA下载和安…

PDF在线预览实现:如何使用vue-pdf-embed实现前端PDF在线阅读

目录 PDF在线预览实现:如何使用vue-pdf-embed实现前端PDF在线阅读 一、前言 二、vue-pdf-embed是什么 1、作用与场景 2、vue-pdf-embed的优点 三、项目初始化与依赖安装 1、初始化Vue项目 2、安装依赖 3、集成vue-pdf-embed插件 四、一个实际的应用demo …

Java面试题精选:消息队列(一)

1、为什么使用消息队列 问题用意: 其实就是想问一下消息队列有哪些使用场景,你项目中什么业务场景用到了消息队列,有什么技术挑战。使用MQ后给你带来了什么好处 规范回答: 消息队列的常见使用场景很多,但比较核心的…

【漏洞修复】Tomcat中间件漏洞

1.CVE-2017-12615 抓包上传一句话木马 密码passwd 2.后台弱口令部署war包 先用弱口令登录网站后台 制作war包 将172.jsp压缩成.zip文件,修改后缀为.war 上传 蚁剑链接 3.CVE-2020-1938 Python2 CVE-2020-1938.py IP -p 端口 -f 要读取的文件 漏洞修复&#xf…

超越自我——带你学haproxy算法一遍过!!!

文章目录 前言介绍 静态算法static-rrfirst 动态算法roundrobinleastconn 其他算法source算法map-base 取模法一致性hashuriurI_param 取模法hdr 总结本文相关连接如下: 前言 本文相关连接如下: 如果想更多了解haproxy的相关知识,请点击&am…

HTTP协议和运行原理

HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。不仅仅适用于[服务器<–>客户端]也是适用于[服务器<–>服务器] HTTP 状态码 1xx 1xx 类状态码属于提示信息&#xff0c;是协议处理中的一种中间状态&#xff0c;实际…

操作系统 IO 相关知识

操作系统 IO 相关知识 阻塞与非阻塞同步与异步IO 和系统调用传统的 IODMAmmap 内存映射sendfilesplice 常用的 IO 模型BIO&#xff1a;同步阻塞 IONIO&#xff1a;同步非阻塞 IOIO 多路复用信号驱动 IOAIO&#xff1a;异步 IO 模型 IO 就是计算机内部与外部进行数据传输的过程&…

加密案例分享:电子设备制造行业

企业核心诉求选择 1.某企业规模庞大&#xff0c;分支众多&#xff0c;数据安全管理方面极为复杂&#xff1b; 2.企业结构复杂&#xff0c;包括研发、销售、财务、总部、分部、办事处、销售等单位连结成为一个庞大的企业组织&#xff0c;数据产生、存储、流转、使用、销毁变化…

NIO线程模型

NIO线程模型主要涉及以下几个方面&#xff1a; 一、基本概念 NIO&#xff08;New Input/Output&#xff09;是Java的一种新的输入输出模型&#xff0c;也被称为非阻塞IO。其核心特点是数据读写操作均是非阻塞的&#xff0c;即在进行读写操作时&#xff0c;若数据未准备好&…

第129天:内网安全-横向移动WmiSmbCrackMapExecProxyChainsImpacket

这里这个环境继续上一篇文章搭建的环境 案例一&#xff1a; 域横向移动-WMI-自带&命令&套件&插件 首先上线win2008 首先提权到system权限 wmic是windows自带的命令&#xff0c;可以通过135端口进行连接利用&#xff0c;只支持明文方式&#xff0c;优点是不用上传别…

【区块链+医疗健康】医链 - 区块链医疗信息管理系统 | FISCO BCOS应用案例

根据《“十四五”规划和 2035 远景目标纲要》&#xff0c;我国在“十四五”时期将全面推进医疗信息化建设。工信部等部 门联合发布《关于加快推动区块链技术应用和产业发展的指导意见》&#xff0c;促进区块链在医疗健康等公共服务领域开 展应用&#xff0c;促进业务协同办理。…

ES6 export import

1.Export 模块是独立的文件&#xff0c;该文件内部的所有的变量外部都无法获取。如果希望获取某个变量&#xff0c;必须通过export输出&#xff0c; 声明的同时导出变量、函数以及类 // profile.js export var firstName Michael; export var lastName Jackson; export var…