首先要明確HTTP請求是一種無狀態(tài)請求
無狀態(tài)請求概念
兩種機制:
Token
- 作用 證明你是誰(用于存儲當前請求人信息...用戶名萄凤,權(quán)限等根據(jù)業(yè)務設(shè)定)
- 說明 一般在登錄成功后設(shè)置躁锁,在登出后刪除。
self.session[token] = {"account": account}
簽名
- 作用 證明你是你(防止中途篡改數(shù)據(jù)镀琉,非法傳參調(diào)用接口)
- 存放位置 可以放在headers诚啃,也可以放在url中
- 算法設(shè)計(可以自定義算法)
def signatuer(*args, **kwargs):
keys = sorted(kwargs.keys())
key_str = "".join(keys)
values_str = ""
for key in keys:
values_str += str(kwargs[key])
logging.info("********Values_Str:{0}********".format(values_str))
s = "{}{}".format(key_str, values_str)
# 加密
signature_str1 = md5(s)
# 加鹽加密na
signature_str = md5("NCSS-SASH-{}".format(signature_str1))
logging.info("********Sign_Str**********".format(signature_str))
return signature_str
- 如果中途數(shù)據(jù)被篡改導致前后端簽名不一致浆竭,則鑒權(quán)異常挪哄,判定非法請求吧秕。
headers = self.request.headers
user_signatuer_str = headers["signatuer"]
if local_signatuer_str != user_signatuer_str:
return