Skip to main content

json web token的生成和验证

Project description

一.生成和校验通用的token

安装和引入Jwt模块

pip install token-fuse

from token_fuse import Jwt

实例化

jwt = Jwt()

组织payload

必选参数:
    1. exp 过期时间 ,now > exp 则失效
可选参数:
    1. uid:用户辨识用户的唯一id,建议[uid, user]任选一种作为参数
    2. iss:签发人
    3. iat:签发时间戳

payload = {'user': 'admin', 'iss': 'django', 'iat': 1642147838, 'exp': 1642152838}

生成token

token = jwt.token(payload)

校验token

result = jwt.auth(token)

打印校验结果

如校验成功返回payload,失败则返回一个布尔为False的AuthFailed对象,打印该对象可查看具体错误信息

print(result)

二. 生成和校验带“熔断”功能的token

在有些项目中,业务要求限制允许token登录的最大数量,本模块利用redis记录token,达到限制登录数量的目的。 引入JwtFuse模块

from token_fuse import JwtFuse

配置Django setting.py

# 如果JWT_CONF缺省,max_login=1
# redis=dict(host='127.0.0.1', port=6379, db=0)
JWT_CONF = {
    'max_login': 3,
    'redis': dict(host='127.0.0.1', port=6379, db=0)
}

实例化

jwt_fuse = JwtFuse()

组织payload

必选参数有:
    1.exp 过期时间 ,now > exp 则失效
    2.iat:签发时间戳 。
    3.uid:用户辨识用户的唯一id,建议[uid, user]任选一种作为参数名都可以
可选参数有:
    1.iss:签发人,在同一台服务器中如果存在多个项目(多项目共用了Redis数据池),
    如果这些项目不是共享token,那么在JwtRange().auth()时为了防止token串号,可以设置iss用于区分。

payload = {'user': 'admin', 'iss': 'django', 'iat': 1642147838, 'exp': 1642152838}

生成token

如果传入了request参数,则默认生成带有设备信息的token, 然后根据request中的User-Agent将访问的请求区分为移动和PC两种设备类型。 再将设备类型{‘ua’:’m’}或{‘ua’:’p’}更新到payload中, 最后使用带有设备类型标记的payload生成token。 不同设备类型不共享max_login,也就是说max_login=1时,ua:p和ua:m的设备能同时登录访问。

token = jwt_fuse.token(payload, request=None)

校验token

校验通过的token会被保存在redis中,保存时间3600秒。保存格式:uid:[token1,token2…],auth函数只会通过最新签发时间的max_len条token.

result = jwt_fuse.auth(token)

打印校验结果

如校验成功返回payload,失败则返回一个布尔为False的AuthFailed对象,打印该对象可查看具体错误信息

print(result)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

token-fuse-1.2.3.tar.gz (7.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page