import hashlib
import string
import time
from urllib.parse import quote
import requests
host = ''
secret_key = '' # 加密或解密共用的key
def generate_token_from(url_without_token, secret_key):
str_content = (url_without_token + secret_key).encode()
digest = hashlib.md5(str_content).hexdigest()
return digest[:20]
def generate_token(url):
ts = int(time.time())
token = generate_token_from(url_without_token, secret_key)
return url_without_token, token
def test():
url = '/***x/stat'
url = '{}?building={}'.format(url, '1號樓')
# 如果url中包含有中文引數,則必須先進行轉碼,不然token校驗會失敗,safe則是對安全的字元不進行轉碼
url = quote(url, safe=string.printable)
url_without_token, token = generate_token(url)
url = '{}{}&token={}'.format(host, url_without_token, token)
print(url)
resp = requests.get(url)
print(resp.status_code)
print(resp.text)
if __name__ == '__main__':
test()
# time_stamp是從請求url中抽取的時間引數,進行與當前時間對比
def _is_url_not_expired(time_stamp):
if not time_stamp.isdigit():
return false
validity_seconds = external_api_token_validity_seconds
return abs(time.time() - int(time_stamp)) <= validity_seconds
# 獲取client請求url,除去token引數,利用服務端secret_key重新生成token,與客戶端token進行對比,一直這有效token,不一致則為無效token
def generate_token_from(url_without_token, secret_key):
str_content = (url_without_token + secret_key).encode()
digest = hashlib.md5(str_content).hexdigest()
return digest[:20]
對於分布式web應用系統,傳統的session校驗策略則顯得很無力,目前jwt校驗機制在sso場景下較為流行,詳細不做介紹,請檢視部落格詳解:jwt詳解
注意:兩者的主要區別在我看其實jwt就是將一些使用者私有資料封裝成json進行了加密,服務端進行了decode,利用解析的引數進行校驗,兩者方案大同小異,主要是看使用場景選取合適的校驗策略
開放API校驗簽名機制
1現在通用的開放api介面校驗機制 校驗使用者傳的引數是否被篡改的做法,首先會把傳的引數加上私鑰做md5 然後再傳到伺服器。客戶端把簽名帶上,訪問伺服器 伺服器會根據事先約定好的,按照傳遞的引數按照key做排序。然後再按客戶端做一遍加密後判斷簽名是否一致。2 為了防止二次多次請求刷資料的問題 引數防...
設計雲API管理策略
對任何雲的企業使用者來講,api管理都是應該優先考慮的事。這事雖然具有挑戰性,但是有管理工具和策略可以輔助。雲api管理是監督企業雲布局的it專家面對的最重要任務之一。一天結束時,雲實際上只是api和服務的收集。基於基礎設施的api執行放置資料到儲存裝置之類的功能,同時基於應用的api控制其他任務,...
IFS日期校驗與數字校驗
在ifs 後台有時從外部匯入資料,直接資料oracle報錯資訊可讀性較差,現改進校驗過程,如下 procedure validate date value in varchar2,format in varchar2 is tmp date date begin tmp date to date v...