API签名搞这么复杂,什么鬼?

简介: 如果你使用过阿里云的云产品的API或者API网关,你会发现API签名是件比较难以搞定的事情。为什么要搞这么复杂?

如果你使用过阿里云的云产品的API或者API网关,你会发现API签名是件比较难以搞定的事情。为什么要搞这么复杂?

他们是怎么签名的

两种类型的API都如何签名,点击查看详细API网关签名云产品签名(以Ecs为例)

看完签名文档,你会发现,两种API都是需要用户,使用密钥对排序后的请求全部内容(注意:是全部内容,包括请求的Method、HEADERS、URL、QueryString、BODY)计算签名串,并将签名串放入请求,供验证请求身份。还需要在请求中增加TimeStamp和Nonce内容。

_

为什么这样设计

搞这么复杂?是产品经理脑残么?还是有意炫耀技术高深?其实不然,每个API操作都是用户与系统的交互过程。既然是系统交互,那么就少不了身份认证,也就是系统要识别请求的来源是否合法,应该给予什么样的操作权限。所以,在API安全中的一个关键词就是“请求认证”。

这个认证和我们在页面上输入一个用户名、密码不同,因为用户实在我们提供的网站上输入的用户名密码。

防密钥泄漏

使用这种签名,只需要API的调用者在API的请求中增加签名,而无需传递密钥。

防篡改

防篡改,是是防止有人恶意篡改请求数据以达到恶意攻击的目的。

原理:签名针对的是所有的请求内容,所以即使请求被拦截,修改任何值都会造成签名失败,因此请求无法被篡改。

防重放攻击

我们先看看重放攻击的概念:攻击者发送一个目的主机已接收过的包,特别是在认证的过程中,用于认证用户身份所接收的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的安全性。这种攻击会不断恶意或欺诈性地重复一个有效的数据传输,重放攻击可以由发起者拦截并重复发该数据到目的主机进行。

所以两种API都在签名中增加了TimeStamp和Nonce避免黑客截获请求后重放攻击。

  • Timestamp:时间戳,在±15分钟内有效
  • Nonce:请求的唯一标识,在±15分钟内只允许使用一次

原理:

_

如此复杂怎么用

别急,复杂确实复杂了一点,但其实是为了API的安全,安全和易用本身就是一堆矛盾体,我们要从中找到平衡点。

为此,API网关和云产品都提供了大量的SDK、调用Demo来降低用户实现签名的难度。API网关云产品

最后

您可能还想一个问题,无论API的签名如何安全,都需API的调用方有一个密钥,但若是纯前端的js、手机app来调用API,密钥写入JS、APP?显然会有安全问题,应该如何做?也许您看看这个《OpenID Connect 认证》应该能够找到答案。

目录
相关文章
|
4月前
|
前端开发 API 数据安全/隐私保护
API接口签名验证
过去对于接口的验证我一般都是直接在登录时为用户发放token,用户在随后的操作中携带了token则允许请求。 但是这样的验证方式存在有一定的问题,如果token被泄露被他人获取,那么就会有非法请求的风险。其他人可以使用这个token自行调用接口进行请求,传入非法参数甚至进行注入攻击等,可能会造成严重的问题。
|
4月前
|
缓存 安全 NoSQL
App开放接口api安全:Token签名sign的设计与实现
在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些 接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等,但是为了安全起见让用户暴露的明文密码次数越少越好,我们一般在web项目 中,大多数采用保存的session中,然后在存一份到cookie中,来保持用户的回话有效性。
|
7月前
|
存储 算法 JavaScript
微信支付-Native下单API支付封装+签名流程解读
微信支付-Native下单API支付封装+签名流程解读
80 0
|
10月前
|
资源调度 API 开发工具
在使用 SchedulerX 中的 SDK 进行 API 调用时,如果出现签名计算不对的错误
在使用 SchedulerX 中的 SDK 进行 API 调用时,如果出现签名计算不对的错误
179 1
|
11月前
|
存储 算法 安全
拒绝接口裸奔!开放API接口签名验证
接口安全问题 请求身份是否合法? 请求参数是否被篡改? 请求是否唯一?
|
JavaScript API
调用物联网平台云端api时的签名js实现
调用物联网平台云端api时的签名js实现。
225 0
|
API Python
调用物联网平台云端api时的签名python3实现
调用物联网平台云端api时的签名python3实现。
168 0
|
API PHP
PHP开发API接口签名生成及验证
PHP开发API接口签名生成及验证
217 0
|
JSON 前端开发 安全
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(二)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(二)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(二)
|
算法 前端开发 安全
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)
SpringCloud Gateway API接口安全设计(加密 、签名、安全)(一)

热门文章

最新文章