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签名认证

  1. ak会放入HTTP Header中
  1. 请求参数+sk会拼接后使用md5加密(签名算法)生成签名
  1. nonce参数,一个随机生成的数,使用过一次之后会在后端记录,记录过的不允许再使用
  1. timestamp参数,规定某个时间nonce重置
 

📎 参考文章

  • 掘金博客一篇
  • csdn博客一篇
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
1004. 最大连续1的个数ⅢHutool使用过程出现bug
  • Utterance
灵檠
灵檠
一个普通的干饭人🍚
Announcement
🎉欢迎访问灵檠的博客!🎉
-- 感谢您的支持 ---
👏欢迎体验👏