• 0
  • 0
分享
  • 基于python的开放平台签名、认证体系测试探索
  • 恬恬圈 2020-05-06 15:00:29 字数 3051 阅读 1481 收藏 0

摘要

当前大型top企业都有非常成熟的开放平台业务,比如微信开放平台、新浪微博开放平台、支付宝开放平台等。开放平台的发展为第三方个人或企业提供了巨大的机遇。开发者想要接入各大开放平台,必须要遵从开放平台的安全机制,实现业务逻辑的前提,首先就是要实现签名验签、加密解密以及授权认证机制。本文介绍基于python的开放平台签名、认证测试体系,可以用于第三方应用的沙盒测试,同时可以应用于服务提供方相关系统的全面测试。

一、引言

开放平台是指大型企业将自身的数据能力、计算能力、用户体系、产品能力等资源以业务+场景+解决方案+技术的优势包装出来,通过openAPI、openSDK、openH5等形式开放给第三方个人或企业使用,实现第三方和服务提供方企业自身的互利共赢。当前各大厂的开放平台都已经比较成熟,比如说微信开放平台、新浪微博开放平台、支付宝开放平台等。同时,各大商业银行也在大力发展自身的开放银行业务。作为第三方开发者,通常来说接入开放平台有比较统一的流程,下图给出了微信开放平台的开通流程。

1.png


图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.png图2 数据预处理函数

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

3.png


图3 数字签名函数

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

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

4.png图4 验签函数

三、加密解密

RAS算法除了可用于数字签名外,同样可用来对报文进行非对称加密,非对称加密安全性要比对称加密高,但由于算法强度比对称加密复杂,加解密的速度比对称加解密慢。对称加密算法的特点是计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样密钥,安全性得不到保证。常见的对称加密算法有DES、AES 等。在互联网上传输消息即要保证信息的安全性,又要保证不能有高的延迟,所以通常会将对称加密算法和非对成加密算法联合使用。使用非对称加密算法进行数字签名以及将对称加密算法所用密钥的加密传输,然后再使用对称加密算法对报文进行加解密,即保证了报文传输的安全性,又保证了报文传输的速度,提升了用户体验。下面介绍python实现AES加解密的方案,其他加密算法也是类似的方法,可以根据服务方的要求选择采用哪种算法。AES加密方式有五种:ECB, CBC, CTR, CFB, OFB。最常用的是CBC加密方式。CBC加密需要一个十六位的key和一个十六位偏移量。开发者使用服务方提供的appsecret作为key来进行加解密,具体实现如下图所示:


5.png图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.png

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

五、总结

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


版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   版权声明:本文作者 优测团队测试专家 郑凯泽 南明玮。 探索性测试是对常规的系统测试、新需求测试及专项测试的重要补充,往往能在短时间内发现更多的问题,一起来看看优测测试专家的分享吧~  一、背景 优测团队长期承接腾讯社交产品、办公产品,如大家所熟知的腾讯文档、QQ等产品的测试服务工作。在用户规模日益增长的背景下,探索性测试是对常规的系统测试、新需求测试及专项测试的重要补充。 经实践验证,该方法可在短时间内发现更多的问题,通过新的思路、新的方法,找到在系统测试阶段未发现的“漏网之鱼”。 二、探索策略 1...
            0 0 899
            分享
          • 读者提问:小白可以转测试吗?阿常回答:可以转,但有条件。看到知乎上有很多人在问这个问题,大家普遍觉得测试是 “ 互联网最低门槛 ” 、“ IT 届最轻松的行业 ”、“ 技术领域鄙视链的最底层 ”。测试的入门确实简单,掌握一些基本的测试理论就行,但想成为一个合格的测试人员,必须具备以下八个要素:一、逻辑清晰这点很重要。一个逻辑思维清晰的测试,他写出来的用例覆盖率广,可以做到最大程度地不漏测;而一个逻辑思维混乱的测试,他写出来的用例连他自己都看不懂,别人更加看不懂,别提不漏测了,能不能测下去恐怕都是问题。二、记忆良好这点很重要。一般用例里面都会写操作步骤,但很多 BUG 不一定...
            1 0 675
            分享
          • 目前用于兼容性测试的云测平台如雨后春笋般涌现。他们一般主打各种机型的兼容性测试,附加提供指定机型的真机测试,除了现在市场上的主流ios,android系统,现在甚至还出现了各种Harmony系统,以及各种不同的分辨率等,可以说给我们测试人员提供了很大便捷,再也不用为了申请什么测试机或者复现问题头疼了。当前常见的云测平台有:AWS Device Farm平台,Android机型只支持国外的机型,没有华为小米vivo等国产机(有点可惜),覆盖率低,费用为免费。阿里云MQC平台,Android机型比较丰富新颖,可以检测出app的崩溃、内存泄漏、异常等问题,日志log比较详细,可以帮助研发人员排查问题...
            1 0 4024
            分享
          •   张忠谋是半导体行业的传奇人物。这位美籍台湾商人和电气工程师于 1987 年创立了台积电,被誉为台湾整个半导体行业之父,时至今日,他仍在大胆预测未来。张忠谋最近表示,目前对人工智能硬件加速器的需求如此之高,以至于他的公司很快就要以惊人的速度倍增产能。  张忠谋是在台积电在日本熊本建立的位于该国第一家制造工厂的落成典礼上作出上述表示的,他期待着这个亚洲国家出现新的"芯片复兴"。  这位台积电创始人说,他与未具名的人工智能芯片公司代表进行了交谈,这些高管人物向这家台湾代工厂提出了一些前所未有的要求。张忠谋说:"他们说的不是数以万计的晶圆,而是希望台积电建立新的制造工...
            0 0 339
            分享
          •        此文讲述了我和腾讯蜜汁缘分。       我在腾讯截至投递简历的前十几分钟填完了简历,以至于我报错岗位了。我想去的是测试开发,却报成了软件测试。       紧接着,我收到了笔试通知。在笔试的模拟测试中,共有2种类型的题目:不定项选择题26分,填空题24分。囊括的知识点很广,有linux,操作系统(页面替换题,进程线程),数据结构,计算机网络。       在正式笔试的时候,考的跟模拟题完全不一样!可能因为我是软件测试而不...
            0 0 1986
            分享
      • 51testing软件测试圈微信