基于签名算法且简单安全的API授权机制是什么

基于签名算法且简单安全的API授权机制是什么

笔者以前在做广告系统时发现对接的大多数平台的广告系统都是以token方式授权接口,而且这个token是一直不变的,由广告主提供,可以说这就是裸奔的接口,只不过这种接口对安全性要求不高,这只能防止恶意调用以及验证渠道的身份。

去年笔者写过一个API统一授权平台,为内部服务开放接口给第三方系统调用提供统一的授权管理,除了方便管理接口授权外,没有其它用途,但却要花成本部署。这应该是我做的一个最无意义的项目了。

今天介绍的API授权机制或许也是使用较为广泛的一种API接口授权机制,记得笔者以前做微信支付功能的时候,微信提供的支付接口也使用这种方式:签名。优势:简单、不影响性能、不需要额外成本。

这种授权方法的实现逻辑是,授权方为每个接入平台设置少数的身份标识(key)以及设置独立密钥,其实也就相当于账号密码。要求接入方系统在每次发起请求都在请求头携带三个参数,分别是身份标识(key)、发起请求的时间戳、以及签名,授权方系统在接收到请求时校验签名,校验通过才放行请求。

校验签名的过程为,从请求头获取key和时间戳,再根据密钥通过相同算法生成签名(调用方与授权方使用相同签名算法),最后对比请求头获取的签名是否相等,如果是则校验成功,否则校验失败。

基于签名算法的授权方法实现过程如下:

授权方:

1.定义签名算法,提供签名生成算法给接入方,并为接入方生成密钥和身份标识;

2.在项目中拦截需要验证签名的接口,从请求头获取时间戳和身份标识,根据密钥和签名算法生成签名,将生成的签名与从请求头获取到的签名比较,如果相同则继续步骤3,否则拒绝请求;

3.请求时效性校验,用当前系统时间戳与从请求头获取到的时间戳比较,如果请求在有效时间范围内则放行请求,否则拒绝并响应签名过期。

接入方:

1.从授权方获取对接文档,并向授权方要密钥和身份标识;

2.根据文档提供的签名生成算法封装签名方法;

3.在发起请求时,将身份标识、当前时间戳、签名写入请求头。

签名生成算法可自定义,如将身份标识(key)、时间戳(timestamp)和密钥拼接在一起后,再采用一种不可逆算法对字符串进行加密生成签名,如MD5算法。规则越复杂就越不容易被破解。

签名加上时间戳有什么好处?

一是为签名添加时效性。授权方系统可根据请求时间戳与系统当前时间戳比较,限定签名只能在一秒内有效,或者五秒内有效。但要求双方系统时间必须正确。

二是安全性,如果黑客拦截了你们系统的请求,然后修改请求再发起请求,这期间肯定是要时间的吧,所以当系统接收到篡改后的请求时,签名的有效期已经过去了。如果改掉请求头传递的时间戳,那么授权方系统生成的签名就与请求头传递的签名不一样了,请求一样无效。

即便你知道授权方(肉鸡)系统的签名规则,如果你不知道密钥,也无法生成有效的签名。并且由于签名采用非对称加密算法,要想通过爆力破解出密钥几乎是不可能完成的事情。

那为什么用时间戳而不用格式化时间字符串呢?

这可能是考虑时区上的兼容吧,不同机房所在时区不同的话,时间就不同,但时间戳都相同。

为发挥这种授权方式的安全性,首先是生成签名的规则必须够复杂,然后是签名的加密算法要不可逆,千万不要使用Base64这种算法,最后是密钥要足够长足够复杂,以确保即便在知道签名生成规则的情况下,也不可能通过暴力破解出密钥。

签名规则指的是生成加密之前的签名字符串的规则,如规则:key+密钥+时间戳+key+密钥。假设key为“app”,密钥为”123″,时间戳为”1111111111111″,拼接生成的加密前的签名为”app1231111111111111app123″,最后通过加密算法对拼接的字符串加密就能生成最终的签名。

每个接口都要写一遍签名逻辑不麻烦吗?

不需要。对于授权方,可通过过滤器或者拦截器完成签名验证逻辑;对于调用方,使用不同框架有不同的方法,但我们总能想到办法只写一次签名逻辑不是吗?

关于基于签名算法且简单安全的API授权机制是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

文章标题:基于签名算法且简单安全的API授权机制是什么,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/23507

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月8日 上午1:27
下一篇 2022年9月8日 上午1:28

相关推荐

  • jmeter正则表达式提取器怎么使用

    使用方法 1,把正则表达式添加到需要提取返回内容的http请求里,添加步骤是,,右键http请求–添加–后置处理器–正则表达式处理器 2,在正则表达式提取器配置设置页里, 1)要检查的响应字段:相当于是要提取哪个位置的内容数据 2)引用名称:我们把内容提取出来后要…

    2022年9月21日
    93000
  • pr如何修改视频分辨率

    pr修改视频分辨率的方法: 1、首先进入pr,然后依次点击“新建项目”点击确定。 2、然后可以看到pr自带的多种选择可以自由选择分辨率。 3、还可以去通过设置,来自定义自己需要的剪辑尺寸。 4、可以根据需求来定义,哪怕是手机尺寸也可以。 5、设置好了可以点击“存储预设”来进行保存。 6、等到保存完成…

    2022年8月29日
    2.4K00
  • sqlserver怎么导出mdf

    sqlserver导出mdf操作方法: 1、打开sql server选择要导出的数据库,右击“任务—>分离”。 2、进入后可以看到要分离成mdf的文件的数据库。 3、勾选分离数据库的删除和更新,点击“确定”。 4、sql server就成功导出mdf和ldf文件了,默认导出的路径在 C:Pro…

    2022年9月8日
    2.3K00
  • 如何查询mysql中所有表

    查询mysql数据库中所有表的方法:1、执行“mysql -u root -p”命令并输入密码来登录mysql数据库服务器;2、执行“USE 数据库名;”命令来切换到指定数据库;3、执行“show tables;”或“SHOW FULL TABLES;”命令,会以表格形式列出mysql数据库中的所有…

    2022年9月22日
    4.8K00
  • windows会声会影x5如何导出视频

    会声会影x5导出视频的方法 1、我们可以在界面的左上角或者上方找到“分享”按钮,点击它。 2、然后选择想要导出的方式,一般我们选择“创建视频文件”。 3、然后我们点击如图“创建视频文件”可以选择视频的格式。 4、这里我们选择mp4格式(大家可以根据需要自行选择),然后还可以选择更细致的格式。 5、选…

    2022年9月15日
    54100
  • cad背景如何调成黑色

    cad背景调成黑色的方法: 1、首先打开cad,右键工具栏,打开“选项” 2、接着进入上方“显示”选项卡。 3、然后打开其中的“颜色”设置。 4、随后选中“背景”选项。 5、再将右边的颜色改为“黑” 6、改完后,点击右下角“应用并关闭”即可将背景调成黑色。 “cad背景如何调成黑色”的内容就介绍到这…

    2022年8月30日
    59100
  • 什么是服务器上网功能禁用

    摘要 服务器上网功能禁用 是指阻止服务器通过网络进行数据传输的一系列措施或设置。主要目的是增加服务器安全性,减少潜在风险。这包括1、物理级禁用,例如拔除网线或关闭无线通讯模块;2、软件级禁用,如使用防火墙规则阻断外部访问;3、服务级禁用,指停止或禁用服务器上可能用于网络传输的服务。一般来说,最为核心…

    2024年4月25日
    1200
  • php判断数组中指定值是不是最后一个元素

    两种判断方法:1、利用end()函数和“===”运算符,获取数组最后一个元素的值,比较该元素值是否为指定值即可,语法“end($arr===”指定值”)”,如果相等则是,反之则不是。2、利用array_pop()函数和“===”运算符,语法“array_pop($arr===…

    2022年9月16日
    68700
  • mysql存储过程中的循环语句怎么写

    mysql存储过程中的循环语句有三种:1、WHILE循环语句,语法“WHILE 条件表达式 DO 循环语句 END WHILE”;2、REPEAT循环语句,语法“REPEAT 循环语句 UNTIL 条件表达式 END REPEAT”;3、LOOP循环语句,语法“[begin_label:] LOOP…

    2022年9月24日
    79600
  • word页面颜色如何更改

    word页面颜色更改方法: 1、首先进入word然后点击屏幕上方的“页面布局”。 2、然后点击“页面颜色”。 3、选择自己喜欢的颜色。 4、你也可以点击其他颜色,选择自己喜欢但是没有的颜色。 5、最后返回word界面就可以看到颜色已经更改完成了。 关于“word页面颜色如何更改”的内容就介绍到这里了…

    2022年9月19日
    86600
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部