最新公告
  • 欢迎您光临悠哉网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • Python如何接入开放平台?签名验签、加密解密、授权认证测试实战

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

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

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

    一、引言

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

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

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

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

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

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

    二、签名验签

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

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

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

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

    • 将请求字典中的空值,或者没必要的参数都去掉(如sign、sign_type等);
    • 对字典进行排序(按ASCII码从小到大);
    • 把字典中的所有元素,按照"参数=参数值"的模式用"&"字符拼接成字符串。

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

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

    图2 数据预处理函数

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

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

    图3 数字签名函数

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

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

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

    图4 验签函数

    三、加密解密

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

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

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

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

    图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第三方登陆服务。

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

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

    五、总结

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

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"www.yoozai.net",如遇到无法解压的请联系管理员!
    悠哉网 » Python如何接入开放平台?签名验签、加密解密、授权认证测试实战

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    悠哉网 WWW.YOOZAI.NET
    悠哉网,用户消费首选的网站,喜欢你就悠哉一下。

    发表评论

    • 1069会员总数(位)
    • 40643资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 480稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情