首先要明确HTTP请求是一种无状态请求
两种机制:
Token
- 作用 证明你是谁(用于存储当前请求人信息...用户名,权限等根据业务设定)
- 说明 一般在登录成功后设置,在登出后删除。
self.session[token] = {"account": account}
签名
- 作用 证明你是你(防止中途篡改数据,非法传参调用接口)
- 存放位置 可以放在headers,也可以放在url中
- 算法设计(可以自定义算法)
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
- 如果中途数据被篡改导致前后端签名不一致,则鉴权异常,判定非法请求。
headers = self.request.headers
user_signatuer_str = headers["signatuer"]
if local_signatuer_str != user_signatuer_str:
return
完整示例
简易登录系统示例