基于签名算法且简单安全的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

相关推荐

  • dch驱动指的是什么

    dch驱动是“声明性组件化硬件支持的应用程序”的意思;dch是“Declarative Componentized Hardware supported apps”的缩写,该驱动程序则是在基于通用UWP的Windows10版本上安装和运行的驱动程序包。 本教程操作环境:windows10系统、DEL…

    2022年9月13日
    57100
  • Web漏洞利用姿势的示例分析

    1、HTTP PUT方法利用 PUT是用来进行文件管理的方法,若运维人员未修改Web服务器缺省配置,依然支持这些方法,则可以向服务器文件系统任意上传文件。 1.1、 Netcat利用PUT方法 Netcat是一款非常出名的网络工具,简称“NC”,有渗透测试中的“瑞士**”之称。它可以用作端口监听、端…

    2022年9月22日
    24300
  • deepl如何翻译pdf

    deepl翻译pdf的方法 网页版: 1、首先我们进入deepl官网。 2、进来之后,点击“翻译文件” 然后把你要翻译的PDF文件直接拖拽或者上传进来。 3、选择好你的目标语言,等待翻译完成之后点击下载就可以了。 客户端版: 1、打开deepl软件。点击上方的翻译.docx和.pptx文档。 2、点…

    2022年9月26日
    54100
  • Navicat怎么修改语言

    本文是基于15.0.21版本,据我所知 12.1.12 版本的菜单跟我的截图不一样,所以没法参考。 步骤 工具->选项->常规->语言->选择 “English” 必须重新打开Navicat Premium才能生效 到此,相信大家对“Navicat怎么修改语言”有了更深的了解…

    2022年9月15日
    34000
  • Redis如何实现排行榜及相同积分按时间排序功能

    在日常的开发中,经常会碰到需要对用户的分值等进行排序,比如在游戏里面需要对战斗力进行排行,在组队活动中需要对各个队伍的贡献值进行排行,在微信中需要对各个好友的步数进行排行,此时一般会选择redis的有序集合对用户的分数进行存储,从而实现排行榜的需求,但是不同的场景排行榜的方式也略有不同,以下根据自己…

    2022年8月30日
    48300
  • SQL Server备份数据库的方法

    一.首先把当前的数据库备份成一个文件 1.按照操作来,选择对应的数据库, 确定备份文件的存储位置 点击确定,生成备份文件。 2.然后可以通过该备份文件还原数据库。 右键数据库点击还原文件和文件组 然后设置目标数据库的名字,如果数据库中已经存在相同名字的,则需要修改或者删除原来同名的数据库,然后在选择…

    2022年9月11日
    21100
  • mysql如何查询临时表

    本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。 mysql临时表 在MySQL中,临时表是一种特殊类型的表,允许您存储临时结果集,您可以在单个会话中多次重复使用。 当查询需要带有JOIN子句的单个SELECT语句的数据是不可能或非常耗时,临时表非常方便。在这种情况下,您…

    2022年9月26日
    74400
  • windows 0x00000be蓝屏代码怎么解决

    解决方法: 方法一: 1、我们可以先看看能不能进入安全模式。 2、重启电脑,按住“F8”进入启动界面,选择“安全模式” 3、如果我们能进入安全模式,就进入“应用”程序,将最近安装的软件卸载。 4、如果我们有安装驱动程序,还需要进入设备管理器,将最新安装的驱动卸载。 5、卸载完成后,再使用杀毒软件扫描…

    2022年9月15日
    24600
  • 电脑出现0x0000007b如何解决

    解决方法: 方法一: 1、很可能是更新了错误的显卡驱动,出现错误代码后先重启电脑。 2、随后按下“F8”进入安全模式选择界面,选择“最近一次的正确配置”就能进入系统了。 3、这样可以解决应用程序冲突问题,如果无法解决,那么可以尝试更改硬盘启动模式。 方法二: 1、首先重启电脑,然后使用热键进入bio…

    2022年9月18日
    16500
  • VSCode中如何添加Emmet快捷键

    Emmet 是一个自动将代码片段扩展为 HTML 的工具。它包含在 VS Code 中。 例如以下片段: div.someClass>span*5 将展开为: <div class=”someClass”> <span></span> <span&gt…

    2022年9月8日
    33700
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部