偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Python如何接入開放平臺?簽名驗簽、加密解密、授權認證測試實戰(zhàn)

安全 數(shù)據(jù)安全 后端
本文介紹基于python的開放平臺簽名、認證測試體系,可以用于第三方應用的沙盒測試,同時可以應用于服務提供方相關系統(tǒng)的全面測試。

當前大型top企業(yè)都有非常成熟的開放平臺業(yè)務,比如微信開放平臺、新浪微博開放平臺、支付寶開放平臺等。開放平臺的發(fā)展為第三方個人或企業(yè)提供了巨大的機遇。開發(fā)者想要接入各大開放平臺,必須要遵從開放平臺的安全機制,實現(xiàn)業(yè)務邏輯的前提,首先就是要實現(xiàn)簽名驗簽、加密解密以及授權認證機制。

本文介紹基于python的開放平臺簽名、認證測試體系,可以用于第三方應用的沙盒測試,同時可以應用于服務提供方相關系統(tǒng)的全面測試。

[[322111]]

一、引言

開放平臺是指大型企業(yè)將自身的數(shù)據(jù)能力、計算能力、用戶體系、產品能力等資源以業(yè)務+場景+解決方案+技術的優(yōu)勢包裝出來,通過openAPI、openSDK、openH5等形式開放給第三方個人或企業(yè)使用,實現(xiàn)第三方和服務提供方企業(yè)自身的互利共贏。

當前各大廠的開放平臺都已經(jīng)比較成熟,比如說微信開放平臺、新浪微博開放平臺、支付寶開放平臺等。同時,各大商業(yè)銀行也在大力發(fā)展自身的開放銀行業(yè)務。作為第三方開發(fā)者,通常來說接入開放平臺有比較統(tǒng)一的流程,下圖給出了微信開放平臺的開通流程。

Python如何接入開放平臺?簽名驗簽、加密解密、授權認證測試實戰(zhàn)

圖1 微信開放平臺接入流程

如圖1第三步所示,在申請的應用上線前,必須要進行必要的測試,而進行業(yè)務邏輯測試的前提就是進行簽名驗簽、加密解密以及授權認證等安全認證機制的測試。python社區(qū)非常成熟,廣泛應用于機器學習、數(shù)據(jù)分析、網(wǎng)絡爬蟲、自動化腳本等諸多領域。

在web開發(fā)中當前也有很多公司諸如Instagram, Quora, Lyft, Dropbox、知乎等后端都采用python開發(fā)。本文介紹基于python的簽名驗簽、加密解密以及授權認證測試的實現(xiàn)。

二、簽名驗簽

第三方個人或企業(yè)通過開放平臺門戶網(wǎng)站提交成為開發(fā)者的申請,開發(fā)者資質認證通過后,開發(fā)者通常會從服務提供方獲得自身的appid、appsecret以及證書,其中證書中包含第三方開發(fā)者的私鑰以及服務提供方的公鑰。

服務提供方保留第三方開發(fā)者的公鑰以及自身的私鑰。開發(fā)者通過自身的私鑰進行簽名,發(fā)送報文到開放平臺服務器,服務器驗簽通過后會用自身的私鑰對返回給開發(fā)者的報文進行簽名,開發(fā)者接收到返回報文后利用服務方提供的公鑰進行驗簽。通過這個過程開發(fā)者和服務方就可以相互確認發(fā)送的報文沒有被中間人篡改。

本文中簽名驗簽用RSA算法進行演示,使用到了python的Crypto庫,需使用pip或conda等其他包管理工具進行安裝。

一般情況下開發(fā)者需要對報文各個字段進行預處理。

  • 將請求字典中的空值,或者沒必要的參數(shù)都去掉(如sign、sign_type等);
  • 對字典進行排序(按ASCII碼從小到大);
  • 把字典中的所有元素,按照"參數(shù)=參數(shù)值"的模式用"&"字符拼接成字符串。

數(shù)據(jù)預處理見下圖的函數(shù):

Python如何接入開放平臺?簽名驗簽、加密解密、授權認證測試實戰(zhàn)

圖2 數(shù)據(jù)預處理函數(shù)

開發(fā)者發(fā)送報文時,用一個Hash函數(shù)對報文中生成摘要,然后用私玥對摘要進行加密,最后加密后的摘要作為報文的數(shù)字簽名和報文一起發(fā)送給服務方。下圖展示了RSA算法的簽名函數(shù)實現(xiàn):

Python如何接入開放平臺?簽名驗簽、加密解密、授權認證測試實戰(zhàn)

圖3 數(shù)字簽名函數(shù)

首先用hash_method函數(shù)選擇采用的摘要算法,可以根據(jù)實際情況進行函數(shù)的重構,這里演示了MD5和SHA256算法的示例。簽名函數(shù)首先要讀入開發(fā)者私鑰,然后用RSA算法完成簽名。

開發(fā)者收到服務方返回的報文后,用與一樣的Hash函數(shù)從接收到的原始報文中計算出報文的摘要,接著再用發(fā)送方的公鑰對報文附加的數(shù)字簽名進行解密,如果這兩段摘要一致,則開發(fā)者就可以確認該報文是服務方發(fā)送的,且沒有被篡改。

Python如何接入開放平臺?簽名驗簽、加密解密、授權認證測試實戰(zhàn)

圖4 驗簽函數(shù)

三、加密解密

RAS算法除了可用于數(shù)字簽名外,同樣可用來對報文進行非對稱加密,非對稱加密安全性要比對稱加密高,但由于算法強度比對稱加密復雜,加解密的速度比對稱加解密慢。對稱加密算法的特點是計算量小、加密速度快、加密效率高。不足之處是,交易雙方都使用同樣密鑰,安全性得不到保證。常見的對稱加密算法有DES、AES 等。

在互聯(lián)網(wǎng)上傳輸消息即要保證信息的安全性,又要保證不能有高的延遲,所以通常會將對稱加密算法和非對稱加密算法聯(lián)合使用。使用非對稱加密算法進行數(shù)字簽名以及將對稱加密算法所用密鑰的加密傳輸,然后再使用對稱加密算法對報文進行加解密,即保證了報文傳輸?shù)陌踩?,又保證了報文傳輸?shù)乃俣?,提升了用戶體驗。

下面介紹python實現(xiàn)AES加解密的方案,其他加密算法也是類似的方法,可以根據(jù)服務方的要求選擇采用哪種算法。AES加密方式有五種:ECB, CBC, CTR, CFB, OFB。最常用的是CBC加密方式。CBC加密需要一個十六位的key和一個十六位偏移量。開發(fā)者使用服務方提供的appsecret作為key來進行加解密,具體實現(xiàn)如下圖所示:

Python如何接入開放平臺?簽名驗簽、加密解密、授權認證測試實戰(zhàn)

圖5 AES加解密

加密后的數(shù)據(jù)要和簽名一同發(fā)送到服務方,通常情況下報文是否采用對稱加密是可選的,開發(fā)者可以 根據(jù)開放平臺的規(guī)定以及交易的重要程度選擇是否加密。

四、授權認證

各大開放平臺都有自身的授權認證機制,目前最流行的機制就是OAuth2.0。OAuth2.0 是一個開放授權標準,它允許用戶授權第三方應用訪問該用戶在某服務(比如微博、微信、qq等)上的特定私有資源,而不需要提供賬號密碼給第三方應用,也不需要注冊第三方應用的賬戶。想要進行開放平臺授權認證測試,就必須要根據(jù)OAuth2.0標準與服務方進行對接。在一般情況下,服務方提供授權服務,主要提供兩類接口:

(1) 授權接口:接受第三方應用的授權請求,該接口通常包含以下參數(shù):

  • response_type:必選。值固定為"code"。
  • client_id:必選。第三方應用的標識ID,也就是appID。
  • state:可選。第三方提供的一個字符串,服務器會原樣返回。
  • redirect_uri:必選。授權成功后的重定向地址。
  • scope:可選。表示想要訪問的資源的授權范圍。

接口訪問成功后會得到授權碼。

(2) 獲取訪問令牌(token)接口:使用授權接口提供的授權碼來頒發(fā)訪問令牌給第三方應用。通常包含以下參數(shù):

  • grant_type:必選。固定值"authorization_code"。
  • code : 必選。授權接口中響應的授權碼。
  • redirect_uri:必選。必須和授權接口中提供的redirect_uri相同。
  • client_id:必選。必須和授權接口中提供的appID相同。

第三方應用拿到token后就可以用token去請求用戶授權其訪問的保存在服務方的資源。

上述接口的請求可以自己編碼實現(xiàn)。python的django-allauth庫已經(jīng)封裝了包括GitHub、Twitter、微博、微信、百度等幾十種第三方授權認證方式。通過簡單的配置就可以應對各大廠開放平臺的授權認證測試。下圖展示了如何在django應用中注冊django-allauth第三方登陸服務。

Python如何接入開放平臺?簽名驗簽、加密解密、授權認證測試實戰(zhàn)

圖6 使用django-allauth庫完成第三方授權登陸

五、總結

本文介紹了使用python接入各大開放平臺,實現(xiàn)簽名驗簽、加密解密以及授權認證的測試方法,給出了詳細的示例。開發(fā)者可以通過將上述的方法封裝成django或者其他框架的web應用,形成易于測試人員操作的界面,在處理簽名驗簽、加密解密、授權認證等測試或開發(fā)工作時,可以極大地極大的提升工作效率。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2024-01-01 09:08:52

API簽名驗簽

2023-03-10 18:34:31

2012-02-15 17:39:36

2021-12-27 16:20:45

鴻蒙HarmonyOS應用

2021-12-28 13:54:52

加密密鑰Java

2020-07-20 07:46:01

程序員加簽驗簽

2015-01-13 10:01:03

AWS市場亞馬遜云平臺

2015-03-26 11:25:10

對稱加密加密壓縮加密解密解壓

2021-07-07 07:33:49

開源Keycloak平臺

2015-02-11 15:23:13

微信SDK

2025-01-07 14:09:58

微服務授權模式

2022-03-03 08:51:09

微服務認證中心授權模式

2025-01-13 08:04:24

2021-12-07 00:10:25

C# 微信支付

2024-07-09 10:13:15

2021-02-01 08:00:00

vimLinux加密

2013-03-21 14:00:41

天翼開放平臺天翼SDK

2013-08-30 10:06:32

ONF
點贊
收藏

51CTO技術棧公眾號