• 0
  • 0
分享
  • 基于python的开放平台签名、认证体系测试探索
  • 恬恬圈 2020-05-06 15:00:29 字数 3051 阅读 1821 收藏 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软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   1、引言  在上一篇中,我们聊到了《AI测试技能卷起来!目标检测算法测试流程与方法总结》,反响还不错。但是,也有测试同学给我留言:“能不能讲一讲模型工程的测试流程和方法”。这当然没问题了, 因为在整个工程中,算法模型只是其中的一个环节,我们模型测试完成后,需要部署到系统中,这样才能让模型真正的应用于业务中。   为了更好的让你们理解模型在系统中的流程,我以我的工作为例(当然,处于职业操守,部分内容进行脱敏),以流程图的形式给大家展示。  通过上图,大家可以了解到模型的整体架构。  这里说两点:  1)数据流:即数据解析,保证数据的质量;  2)特征库:即数据处理,提取数据特征进行...
            0 0 832
            分享
          •   苹果公司正在大幅提高保修期外电池更换的价格,这次主要是针对iPhone 16 Pro机型。最新款 iPhone 两款较大机型保修期外更换电池的新费用为 119 美元,高于iPhone 15 Pro和 Pro Max 的 99 美元。普通 iPhone 16 和 iPhone 16 Plus 的费用仍为 99 美元。  苹果上一次提高保修期外电池更换费用是在 2022 年的 iPhone 14 机型上。价格从 69 美元涨到了 99 美元。  由于所有新款 iPhone 都自带至少一年的AppleCare保修,预计新买家不会很快感受到这一变化。购买 AppleCare+ 保修服务可在三年或更...
            0 0 567
            分享
          •   为啥今天想起这个话题呢,因为我之前有过这样的经历,且身边的小伙伴也频频遇到面试官来这么个灵魂拷问,所以觉得这点其实还挺重要的,特来分享一下我的应对之策。  既然问题出来了,我们就要弄懂它的来龙去脉,深层次的去了解下这个问题背后折射着面试官什么心思。然后根据面试官的隐藏深意,再去找答案就有的放矢了。  当然有些小伙伴觉得自己技术过硬,又担任过测试的核心角色,有空窗期可是高枕无忧。我只想对这样的仁兄说一句:“too young, too simple”。可以这么说,无论你是测试大拿还是管理精英,只要你有职业空窗期,招聘方都是会有顾虑的。好一点的会询问你这段时间干嘛去了,差一点的直接无视你的简历...
            0 0 1728
            分享
          •   为什么做金融类软件测试  举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班少甚至基本没有,业务稳定。实在是测试类岗位中的香饽饽!  一、什么是金融行业  金融业是指经营金融商品的特殊行业,它包括银行业、保险业、信托业、证券业和租赁业。  往往涉及证券、银行、基金、信托、保险、投行、期货等领域。  二、金融行业的业务特点  随着金融行业的业务不断增加,金融交易模式的不断变化,金融机构对信息化的要求也越来越高,高质量的金融软件对于金融机构来说显得尤为重要。如何保证金融行业软件的质量,对金融行业软件的测试人员来说,也提出了更高的要求。  1. 金融行业的业务特点...
            1 1 1187
            分享
          •   保持怀疑  对产品的质量持有一颗敢于怀疑的心,质量不是开发人员说"我做完了而且也测过了"就可以保证的。直到你测完最后一轮,最后一个用例之前,你都应该对产品的质量持怀疑态度。这个态度是混口饭吃的最基本技能。  永不妥协  1、不要对产品质量妥协,哪怕开发口口声声说这个问题不好改,改不了,一改就要延期之类的话。  2、妥协意味着你成功的把质量不好这口黑锅华丽的背在了自己的身上。  让用户满意  产品或项目成功的标志之一是能够让用户满意,很显然用户是不会对一个bug频出的系统/产品满意的。  从用户角度思考  1、很多测试同学不知道测试用例应该怎么去写,不知道怎么写才能写得出...
            0 0 1213
            分享
      • 51testing软件测试圈微信