当前大型top企业都有非常成熟的开放平台业务,比如微信开放平台、新浪微博开放平台、支付宝开放平台等。开放平台的发展为第三方个人或企业提供了巨大的机遇。开发者想要接入各大开放平台,必须要遵从开放平台的安全机制,实现业务逻辑的前提,首先就是要实现签名验签、加密解密以及授权认证机制。

本文介绍基于python的开放平台签名、认证测试体系,可以用于第三方应用的沙盒测试,同时可以应用于服务提供方相关系统的全面测试。

一、引言

开放平台是指大型企业将自身的数据能力、计算能力、用户体系、产品能力等资源以业务+场景+解决方案+技术的优势包装出来,通过openAPI、openSDK、openH5等形式开放给第三方个人或企业使用,实现第三方和服务提供方企业自身的互利共赢。

当前各大厂的开放平台都已经比较成熟,比如说微信开放平台、新浪微博开放平台、支付宝开放平台等。同时,各大商业银行也在大力发展自身的开放银行业务。作为第三方开发者,通常来说接入开放平台有比较统一的流程,下图给出了微信开放平台的开通流程。

图1 微信开放平台接入流程

如图1第三步所示,在申请的应用上线前,必须要进行必要的测试,而进行业务逻辑测试的前提就是进行签名验签、加密解密以及授权认证等安全认证机制的测试。python社区非常成熟,广泛应用于机器学习、数据分析、网络爬虫、自动化脚本等诸多领域。

在web开发中当前也有很多公司诸如Instagram, Quora, Lyft, Dropbox、知乎等后端都采用python开发。本文介绍基于python的签名验签、加密解密以及授权认证测试的实现。

二、签名验签

第三方个人或企业通过开放平台门户网站提交成为开发者的申请,开发者资质认证通过后,开发者通常会从服务提供方获得自身的appid、appsecret以及证书,其中证书中包含第三方开发者的私钥以及服务提供方的公钥。

服务提供方保留第三方开发者的公钥以及自身的私钥。开发者通过自身的私钥进行签名,发送报文到开放平台服务器,服务器验签通过后会用自身的私钥对返回给开发者的报文进行签名,开发者接收到返回报文后利用服务方提供的公钥进行验签。通过这个过程开发者和服务方就可以相互确认发送的报文没有被中间人篡改。

本文中签名验签用RSA算法进行演示,使用到了python的Crypto库,需使用pip或conda等其他包管理工具进行安装。

一般情况下开发者需要对报文各个字段进行预处理。

1.将请求字典中的空值,或者没必要的参数都去掉(如sign、sign_type等);

2.对字典进行排序(按ASCII码从小到大);

3.把字典中的所有元素,按照"参数=参数值"的模式用"&"字符拼接成字符串。

数据预处理见下图的函数:

图2 数据预处理函数

开发者发送报文时,用一个Hash函数对报文中生成摘要,然后用私玥对摘要进行加密,最后加密后的摘要作为报文的数字签名和报文一起发送给服务方。下图展示了RSA算法的签名函数实现:

图3 数字签名函数

首先用hash_method函数选择采用的摘要算法,可以根据实际情况进行函数的重构,这里演示了MD5和SHA256算法的示例。签名函数首先要读入开发者私钥,然后用RSA算法完成签名。

开发者收到服务方返回的报文后,用与一样的Hash函数从接收到的原始报文中计算出报文的摘要,接着再用发送方的公钥对报文附加的数字签名进行解密,如果这两段摘要一致,则开发者就可以确认该报文是服务方发送的,且没有被篡改。

图4 验签函数

三、加密解密

RAS算法除了可用于数字签名外,同样可用来对报文进行非对称加密,非对称加密安全性要比对称加密高,但由于算法强度比对称加密复杂,加解密的速度比对称加解密慢。对称加密算法的特点是计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样密钥,安全性得不到保证。常见的对称加密算法有DES、AES 等。

在互联网上传输消息即要保证信息的安全性,又要保证不能有高的延迟,所以通常会将对称加密算法和非对称加密算法联合使用。使用非对称加密算法进行数字签名以及将对称加密算法所用密钥的加密传输,然后再使用对称加密算法对报文进行加解密,即保证了报文传输的安全性,又保证了报文传输的速度,提升了用户体验。

下面介绍python实现AES加解密的方案,其他加密算法也是类似的方法,可以根据服务方的要求选择采用哪种算法。AES加密方式有五种:ECB, CBC, CTR, CFB, OFB。最常用的是CBC加密方式。CBC加密需要一个十六位的key和一个十六位偏移量。开发者使用服务方提供的appsecret作为key来进行加解密,具体实现如下图所示:

图5 AES加解密

加密后的数据要和签名一同发送到服务方,通常情况下报文是否采用对称加密是可选的,开发者可以 根据开放平台的规定以及交易的重要程度选择是否加密。

四、授权认证

各大开放平台都有自身的授权认证机制,目前最流行的机制就是OAuth2.0。OAuth2.0 是一个开放授权标准,它允许用户授权第三方应用访问该用户在某服务(比如微博、微信、qq等)上的特定私有资源,而不需要提供账号密码给第三方应用,也不需要注册第三方应用的账户。想要进行开放平台授权认证测试,就必须要根据OAuth2.0标准与服务方进行对接。在一般情况下,服务方提供授权服务,主要提供两类接口:

1.授权接口:接受第三方应用的授权请求,该接口通常包含以下参数:

response_type:必选。值固定为"code"。

client_id:必选。第三方应用的标识ID,也就是appID。

state:可选。第三方提供的一个字符串,服务器会原样返回。

redirect_uri:必选。授权成功后的重定向地址。

scope:可选。表示想要访问的资源的授权范围。

接口访问成功后会得到授权码。

2.获取访问令牌(token)接口:使用授权接口提供的授权码来颁发访问令牌给第三方应用。通常包含以下参数:

grant_type:必选。固定值"authorization_code"。

code : 必选。授权接口中响应的授权码。

redirect_uri:必选。必须和授权接口中提供的redirect_uri相同。

client_id:必选。必须和授权接口中提供的appID相同。

第三方应用拿到token后就可以用token去请求用户授权其访问的保存在服务方的资源。

上述接口的请求可以自己编码实现。python的django-allauth库已经封装了包括GitHub、Twitter、微博、微信、百度等几十种第三方授权认证方式。通过简单的配置就可以应对各大厂开放平台的授权认证测试。下图展示了如何在django应用中注册django-allauth第三方登陆服务。

图6 使用django-allauth库完成第三方授权登陆

五、总结

本文介绍了使用python接入各大开放平台,实现签名验签、加密解密以及授权认证的测试方法,给出了详细的示例。开发者可以通过将上述的方法封装成django或者其他框架的web应用,形成易于测试人员操作的界面,在处理签名验签、加密解密、授权认证等测试或开发工作时,可以极大地极大的提升工作效率。

python调用加签名的接口_python接入开放平台:签名验签、加密解密、授权认证的测试方法...相关推荐

  1. Openssl ECC椭圆曲线算法 - 密钥/签名/验签/加密/解密/SM2密文 - 序列化反序列化导出导入 - C源码

    . . . . 废话不多说,本代码继承自另外一位讲解Openssl ECC椭圆曲线算法大佬的源代码:https://blog.csdn.net/scuyxi/article/details/59182 ...

  2. [crypto]-52-python3中rsa(签名验签加密解密)aes(ecb cbc ctr)hmac的使用,以及unittest测试用

    环境: 在ubuntu14.04下,记得安装:sudo pip3 install pycrypto 代码示例1: =========================== import base64 f ...

  3. 学习笔记:公钥私钥 签名验签 加密解密 CA 证书

    重点: 1.区分加密解密和签名验签(在非对称加密情景下) 加密解密:#A给B发消息# A用B的公钥进行运算(加密),B收到后用B自己的私钥进行逆向运算(解密) 签名验签:#A给B发消息# A用A自己的 ...

  4. python调用百度识别文字接口_python调用百度通用文字识别接口进行验证码识别

    官方文档入口 https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.html#.E7.AE.80.E4.BB.8B 安装 pip3 install baidu- ...

  5. 请教下uniapp 打包分享提示签名不对 检查与微信开放平台签名是否一致 这个怎么解决

    一.第一步在微信开发平台检测数据,看对应的包名和签名是否一致 签名的话  可以通过安装APP,在通过签名查看工具查看对应的签名是否一致 二.数据,包名和签名都一致的情况下,还提示签名不一致的话,直接把 ...

  6. php sha256加密介绍,php SHA256WithRSA签名验签加密解密

    使用: $pri_key ="": $pub_key = ""; $char = '方方块儿';//要加密的字符 $sign = $this->RsaEn ...

  7. springboot接口签名统一效验_Python如何接入开放平台?签名验签、加密解密、授权认证测试实战...

    当前大型top企业都有非常成熟的开放平台业务,比如微信开放平台.新浪微博开放平台.支付宝开放平台等.开放平台的发展为第三方个人或企业提供了巨大的机遇.开发者想要接入各大开放平台,必须要遵从开放平台的安 ...

  8. Python如何接入开放平台?签名验签、加密解密、授权认证测试!

    当前大型top企业都有非常成熟的开放平台业务,比如微信开放平台.新浪微博开放平台.支付宝开放平台等.开放平台的发展为第三方个人或企业提供了巨大的机遇.开发者想要接入各大开放平台,必须要遵从开放平台的安 ...

  9. python实现简单的api接口-简单实现Python调用有道API接口(最新的)

    # ''' # Created on 2018-5-26 # # @author: yaoshuangqi # ''' import urllib.request import urllib.pars ...

  10. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

最新文章

  1. 周三多管理学第七版pdf_考研(管理学)相对好考的211院校推荐
  2. 开启Linux系统路由转发功能 实现多网段电脑共享上网
  3. HDU 5617 Jam's maze dp+滚动数组
  4. php执行npm命令_npm系列之命令执行
  5. ubuntu设置PATH
  6. PyQt5学习--基本窗口控件--QLabel
  7. 计算机桌面锁定了没设密码怎么解锁,电脑桌面锁屏怎么设置,电脑怎么给手机解锁...
  8. C# json解析字符串总是多出双引号_SSM框架中JSON数据交互实现页面显示图书种类...
  9. 20145236《网络攻防》 Exp3 免杀原理与实践
  10. opcdaclient 对com组件的调用返回了错误hresult_【分享】易语言编程常见错误新手篇...
  11. JAVA学习者从入门到精通
  12. 百分点技术负责人:我们为什么需要大数据操作系统
  13. Markdown入门总结
  14. 怎么成为游戏建模师?
  15. 燕十八redis 微博地址
  16. Linux——磁盘分区与挂载
  17. 数学の入门到入土 第1天
  18. 我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,稳的一批
  19. 怎么提高百度快照更新的频次?
  20. WordPress CMS百度快速收录 API 提交代码以及配置教程

热门文章

  1. 微信第三方登录有两种登录方式, 1. 微信开放平台登录 2. 微信公众平台授权登录?
  2. Python 运算符(Operators)
  3. 有各组方差怎么算组间平方和_方差分析:组间离差平方和组内离差平方的定义是什么?...
  4. 有赞搜索系统的技术内幕
  5. 一文读懂汽车功能安全
  6. 王垠:清华梦的粉碎—写给清华大学的退学申请 2005.9.22
  7. Resnet解决了什么问题
  8. 流程制造行业信息系统 架构
  9. 使用hexo发布文章
  10. Win11微软输入法打不出汉字怎么办?