type
status
date
slug
summary
tags
category
icon
password
这篇文章,首先介绍什么是api签名认证,接着通过与HTTP比较介绍api签名认证为什么要使用,最后给出api签名认证的简单实现方案
📝 什么是API签名认证
API 签名认证是一种用于保证API请求的安全性和完整性的一种机制,通过在API请求中添加签名字段来验证请求发送者的身份,并确保请求在传输过程中没有被篡改。
签名字段:accessKey(ak,用户标识)、secretKey(sk,密钥)
换句话说,就是一种相对于HTTP更加安全的身份校验方式,可以抵御更多种类的攻击。
🤗 与HTTP对比
❓ 什么是HTTP身份认证
当访问网页时,为了表明我们的身份(含有用户名和密码信息),我们会在请求头中加入
Authorization
,这个字段的值是用户名和密码拼接编码(base64)之后的值。通过这个值,既保护了用户的信息,后端又可以通过这个值来判断身份,安全性已经校友成效。但是,这种身份认证还会会有服务器负载上的问题,例如当某个坏蛋🦹 拿到了某次登录的
Authorization
,他就可以使用这个Authorization
进行无限次的访问服务器,进行DDos攻击,我们称这种反复使用Authorization
访问的方式为重放。在一些特别场景,如一些对外的API服务,过多的使用会导致服务器的瘫痪,因此我们引入新的身份认证方式API认证
🔑 API签名认证优点
首先是安全性问题,API签名认证使用上述所说的ak与sk(其实与用户名与密码差不多),但是与HTTP不一样最终生成的sign签名值每次都不一样,因此,我们可以说ak与sk是无状态的,每次访问都需要带上,不关心访问的是谁。这一点很符合API服务的需求。
其次API签名认证还可以引入nonce与timestamp来缓解重放,前者可以规定每次请求的唯一性,后者可以规定重复请求记录的时间域,增加灵活性。
✍️ 实现API签名认证
- ak会放入HTTP Header中
- 请求参数+sk会拼接后使用md5加密(签名算法)生成签名
- nonce参数,一个随机生成的数,使用过一次之后会在后端记录,记录过的不允许再使用
- timestamp参数,规定某个时间nonce重置
📎 参考文章
- 掘金博客一篇
- csdn博客一篇
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- Author:灵檠
- URL:https://blog.ly-qing.lol/article/8495b1d9-8752-4881-ad20-fbdd9c86c8d4
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!