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

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

May 18, 2023 am 10:49 AM
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授权机制是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PHP和Manticore Search开发指南:快速创建搜索API PHP和Manticore Search开发指南:快速创建搜索API Aug 07, 2023 pm 06:05 PM

PHP和ManticoreSearch开发指南:快速创建搜索API搜索是现代Web应用程序中不可或缺的功能之一。无论是电子商务网站、社交媒体平台还是新闻门户,都需要提供一个高效、准确的搜索功能来帮助用户找到他们感兴趣的内容。而ManticoreSearch作为一个性能卓越的全文搜索引擎,为我们提供了一个强大的工具来创建出色的搜索API。本文将向您介绍如何

如何在PHP项目中通过调用API接口来实现数据的爬取和处理? 如何在PHP项目中通过调用API接口来实现数据的爬取和处理? Sep 05, 2023 am 08:41 AM

如何在PHP项目中通过调用API接口来实现数据的爬取和处理?一、介绍在PHP项目中,我们经常需要爬取其他网站的数据,并对这些数据进行处理。而许多网站提供了API接口,我们可以通过调用这些接口来获取数据。本文将介绍如何使用PHP来调用API接口,实现数据的爬取和处理。二、获取API接口的URL和参数在开始之前,我们需要先获取目标API接口的URL以及所需的

如何处理Laravel API报错问题 如何处理Laravel API报错问题 Mar 06, 2024 pm 05:18 PM

标题:如何处理LaravelAPI报错问题,需要具体代码示例在进行Laravel开发时,经常会遇到API报错的情况。这些报错可能来自于程序代码逻辑错误、数据库查询问题或是外部API请求失败等多种原因。如何处理这些报错是一个关键的问题,本文将通过具体的代码示例来演示如何有效处理LaravelAPI报错问题。1.错误处理在Laravel

Oracle API使用指南:探索数据接口技术 Oracle API使用指南:探索数据接口技术 Mar 07, 2024 am 11:12 AM

Oracle是一家全球知名的数据库管理系统提供商,其API(ApplicationProgrammingInterface,应用程序接口)是一种强大的工具,可帮助开发人员轻松地与Oracle数据库进行交互和集成。在本文中,我们将深入探讨OracleAPI的使用指南,向读者展示如何在开发过程中利用数据接口技术,同时提供具体的代码示例。1.Oracle

React API调用指南:如何与后端API进行交互和数据传输 React API调用指南:如何与后端API进行交互和数据传输 Sep 26, 2023 am 10:19 AM

ReactAPI调用指南:如何与后端API进行交互和数据传输概述:在现代的Web开发中,与后端API进行交互和数据传输是一个常见的需求。React作为一个流行的前端框架,提供了一些强大的工具和功能来简化这一过程。本文将介绍如何使用React来调用后端API,包括基本的GET和POST请求,并提供具体的代码示例。安装所需的依赖:首先,确保在项目中安装了Axi

Oracle API集成策略解析:实现系统间无缝通信 Oracle API集成策略解析:实现系统间无缝通信 Mar 07, 2024 pm 10:09 PM

OracleAPI集成策略解析:实现系统间无缝通信,需要具体代码示例在当今数字化时代,企业内部系统之间需要相互通信和数据共享,而OracleAPI就是帮助实现系统间无缝通信的重要工具之一。本文将从OracleAPI的基本概念和原理入手,探讨API集成的策略,最终给出具体的代码示例帮助读者更好地理解和应用OracleAPI。一、OracleAPI基本

使用Python将API数据保存为CSV格式 使用Python将API数据保存为CSV格式 Aug 31, 2023 pm 09:09 PM

在数据驱动的应用程序和分析领域,API(应用程序编程接口)在从各种来源检索数据方面发挥着至关重要的作用。使用API数据时,通常需要以易于访问和操作的格式存储数据。其中一种格式是CSV(逗号分隔值),它允许有效地组织和存储表格数据。本文将探讨使用强大的编程语言Python将API数据保存为CSV格式的过程。通过遵循本指南中概述的步骤,我们将学习如何从API检索数据、提取相关信息并将其存储在CSV文件中以供进一步分析和处理。让我们深入了解使用Python进行API数据处理的世界,并释放CSV格式的潜

开发建议:如何利用ThinkPHP框架进行API开发 开发建议:如何利用ThinkPHP框架进行API开发 Nov 22, 2023 pm 05:18 PM

开发建议:如何利用ThinkPHP框架进行API开发随着互联网的不断发展,API(ApplicationProgrammingInterface)的重要性也日益凸显。API是不同应用程序之间进行通信的桥梁,它可以实现数据共享、功能调用等操作,为开发者提供了相对简单和快速的开发方式。而ThinkPHP框架作为一款优秀的PHP开发框架,具有高效、可扩展和易用

See all articles