JWT 简介

Json web token(JWT),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源

三部分组成

第一部分:算法、token类别

格式为字典-元数据 ,格式如下,该部分数据需要转成json串并用base64转码

{'alg':'HS256','typ':'JWT'}
# alg 代表要使用的算法
# typ 标识该token的类别,此处必须为大写的JWT

第二部分:具体数据

格式为字典,此部分为公有声明和私有声明
公有声明:JWT提供了内置关键字用于描述常见的问题,此部分均可为可选项,用户根据自己需求,按需求添加key,常见公有声明如下:

{'exp':xxx, # Expiration Time 此token的过期时间的时间戳
 'iss':xxx, # (Issuer) Claim 声明此token的签发者
 'iat':xxx, # (Issued At) Claim 指明此创建时间的时间戳
 'aud':xxx  # (Audience) Claim 指明此token签发面向群体
}

私有声明:用户可根据自己业务需求,添加自定义的key

'username':'xxx'

第三部分:签名,用来校验

校验

  1. 解析header,确认alg(算法)
  2. 签名校验,根据传过来的header和payload按alg指明的算法进行签名,将签名结果和传过来的sign进行对比,若对比一直,则校验通过
  3. 获取payload自定义内容

特殊说明:
若encode的时候payload中添加了exp字段,则exp字段的值为 当前时间戳+此token的有效期时间,例如希望token300秒

expired_time = datetime.datetime.utcnow() + datetime.timedelta(
            minutes=TOKEN_EXPIRE_MINUTES
        )
token = jwt_encode({
	  "name": username,
	  "exp": expired_time,
	  "role": role
}, TOKEN_SECRET_KEY, algorithm="HS256")

你可能感兴趣的:(django,后端)