API 校驗與失效策略

2021-10-01 20:16:11 字數 1837 閱讀 3037

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...