python+request 接口自动化 jwt Token封装实现

一、什么是Token

Token可以理解为一种特殊的加密密码或者暗号;只有暗号匹配才能通过,否则就是“敌人”;

我们在登录XX站点,XX系统都需要输入自己的用户名和密码;但是在接口调用过程中,为了账号加密安全性,不能明文将账号密码放入到请求体或请求头中;

所以需要一种加密方式—暗号,这种暗号格式可以自己定义,那么只有“自己人”知道;

从而达到加密安全调用和请求对方接口;

1、正常输入账号密码的请求过程:

1)登录页面登录后,服务端会生成token返回给客户端并缓存;

2)后续操作业务页面,会默认带上缓存的token;从而能对上暗号,实现正常的请求;

2、调用接口直接请求服务端,可以使用2中方法:

1)调用登录接口后,获得返回的token,在后续请求头或者url中带上token;

2)知道加密盐后,生成token,在接口请求中带上生成的token;

二、Token包含内容

Token的格式可以自行约定,如下就是一个较简单的Token

{
	"iss": "明源应用",
	"iat": 1702275113,
	"jti": "0AC3291A-88E9-017D-DF00-9CE0ECC29446",
	"u": "admin",
	"c": "",
	"a": "Mysoft",
	"t": "ompseyddyfyz"
}

Token为了安全性,一次生成的token只能使用一次,下次使用需要按照规则重新生成;所以在以上的token中加入了时间戳(iat)和 uuid(jti);

时间戳:是为了限制token有效期

uuid:是为了限制token使用次数,如果两次请求的id相同,那么服务端就会自动判断token无效;

所以我们自己要封装token,基于以上这个案例,我们需要每次动态生成时间戳和uuid

三、请求Token封装

如下是python代码实现的基于jwt的token封装:

token分为三部分:data(数据)、secret(盐)、algorithm(加密方式)

分四步实现:

1、准备data

2、替换时间戳和uuid

3、准备加盐,此为实现服务端约定好的秘钥

4、加密生成最终token

# jwt生成token
def newToken(tenantName):
    # 1、token格式模板
    ds = '{"iss": "明源应用","iat": 1702275113,"jti": "0AC3291A-88E9-017D-DF00-9CE0ECC29446","u": "admin","c": "","a": "Mysoft","t": "ompseyddyfyz"}'
    payload = json.loads(ds)  # 转换为json
    timestamp = time.time()  # 生成时间戳
    timestamp = round(timestamp)
    guid = uuid.uuid4()  # 生成guid
    # print(guid)
    # 2、替换模板中的值
    payload['iat'] = timestamp  # 修改时间戳
    payload['jti'] = str(guid)  # 修改随机guid
    payload['t'] = tenantName  # 修改租户
    # print(payload)
    # print(type(payload))
    # payload = json.dumps(data)
    # 3、加盐
    secret = 'ff483a6526ddf275'
    # 4、加密生成token
    token = jwt.encode(payload, secret, algorithm='HS256')
    # print(token)
    # Authorization = 'Bearer '+token
    return token

相关推荐

  1. python API自动化(接口自动化简单封装与Logging应用)

    2023-12-26 03:36:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-26 03:36:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-26 03:36:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-26 03:36:02       82 阅读
  4. Python语言-面向对象

    2023-12-26 03:36:02       91 阅读

热门阅读

  1. [沫忘录]mysql基础(函数及约束)

    2023-12-26 03:36:02       51 阅读
  2. 前端八股文(js篇)

    2023-12-26 03:36:02       53 阅读
  3. SpringBoot中@PostConstruct注解作用

    2023-12-26 03:36:02       55 阅读
  4. yolov5知识蒸馏

    2023-12-26 03:36:02       46 阅读
  5. mysql的timestamp字段和serverTimezone的关系

    2023-12-26 03:36:02       45 阅读
  6. python中的 multiprocessing.Event是什么

    2023-12-26 03:36:02       59 阅读
  7. docker部署jenkins,发布任务执行scp免密传输

    2023-12-26 03:36:02       48 阅读