python 鉴权相关

本贴最后更新于 765 天前,其中的信息可能已经时异事殊

一.session鉴权
1、用户注册的时候,客户端提交用户名和密码,服务端会存储用户名和密码,为了防止被脱库,密码存储一般会进行加密存储,比如md5、rsa加密等待。
2、注册完成后,用户发起登陆,客户端提交用户名和密码,服务端会对用户提交的数据进行校验,用户名和密码正确,此时服务端会根据用户信息(用户id,用户名,user_agent)等创建一个session,并存储在数据库中(一般是存储在redis中),保存好之后,服务端会将这个session通过响应头的Set-cookie字段返回给客户端。
3、客户端收到服务端的响应,浏览器会自动将响应头Set-cookie的内容添加到请求头的cookie中,在请求其他接口时会始终携带这个这个请求头。
4、服务端收到客户端发起的请求后,会从请求头中将session提取出来与之前存储到redis中的session进行对比,如果一致则返回对应的接口数据给客户端,如果不一致或者是超时则不返回接口数据给客户端。
5、session鉴权缺点很明显,服务端存储压力较大,需要大量的存储空间来存储session

二.token鉴权
1、用户发起登陆,客户端提交用户名和密码,服务端会对用户提交的数据进行校验,校验通过以后此时会提取用户关键信息(比如用户名密码、用户id、时间戳等信息进行排序、然后再进行签名运算)通过特定的算法生成token,然后将这个token放在响应头里面返回给客户端。
2、客户端收到响应结果,然后会从响应结果里面获取token,然后将token放在请求头token字段中(通常情况下是这个字段,具体由后端决定),再去请求其他接口。
3、服务端再次收到客户端,此时服务端会去请求头中取出token,然后对token进行解签,获取到用户关键信息,再去数据库去进行查询是否存在改用户。但凡这个token被修改过,解签就会失败,鉴权就自然失败了。
4、服务端鉴权成功就会返回对应接口数据给客户端,鉴权失败就不会返回对应数据。

三.开放鉴权(加密、字典序)

import uuid
import time
from jsonpath import jsonpath
import pprint
class Manage:
def __init__(self):
self.login_url = "http://mall.lemonban.com:8108/adminLogin"
self.get_activity_url = "http://mall.lemonban.com:8108/sys/webConfig/getActivity"
self.header = {}def login(self):
    # 生成uuid
    session_id = str(uuid.uuid4())
    print("打印session_id:", session_id)

    data = {
        "t": int(time.time() * 1000),
        "principal": "student",
        "credentials": "123456a",
        "sessionUUID": session_id,
        "imageCode": "lemon"
    }
    # 获取登录响应结果
    res = requests.post(url=self.login_url, json=data)
    print(res.json())
    # jsonpath提取token
    token = jsonpath(res.json(),"$..access_token")[0]
    print(token)
    # 将token添加到请求头
    self.header["Authorization"] = "bearer{}".format(token)
    print("请求头",self.header)

def get_activity(self):
    self.login()
    res = requests.get(url=self.get_activity_url, headers=self.header)
    print(res.request.headers)
    pprint.pprint(res.json())
if __name__ == '__main__':
cl = Manage()
cl.get_activity()
回帖
请输入回帖内容 ...