标签:day 安全 这一 主键 数据 ali 合法性 pytho 校验
服务器端产生,保存不重要或认证信息,保存在客户端
服务器端产生,保存登录信息等重要信息,保存在服务端
服务端产生,保存认证信息,保存在客户端的cookie中
json web token认证
基本原理:第一次认证通过用户名和密码,服务端签发一个json的token,后续客户端的请求都带着这个token,服务端解析这个token来判断客户端的身份和合法性.
jwt由,头,载荷,和签名三部分组成,各部分间通过.
来分割,每一部分都是一个json字典,头和载荷采用了base64可逆加密算法加密,签名采用HS256不可逆加密算法加密.
基本信息:可逆与不可逆的加密算法,公司名称,项目组信息,开发者信息等
{
"company":"ali",
"algorithm":"base64";
...
}
核心信息:用户主键,用户账号,客户端设备信息,过期时间等,官方建议但是非必须
{
"pk":1,
...
}
安全信息:头的加密结果,载荷的加密结果,服务器的安全码(盐)等
{
"header":"...",
...
}
头内容:
写死(可以为空):公司,项目信息,都是固定不变的
=> 将数据字典转化为json格式字符串,再将json字符串加密为base64字符串
载荷的内容:
用户账号,客户端设备信息由客户端提供,用户名,主键等要验证信息,过期时间以及刷新时间
=> 将数据字典转化为json格式字符串,再将json字符串加密为base64字符串
签名的内容:
将头的加密结果,载荷的加密结果,再从服务器上拿到安全码,也可以包含额外的载荷部分(用户信息,设备信息)
=> 将数据字典转化成json字符串,再将json字符串加密为HS256字符串
将三个字符串使用.
连接称为三段式token
.
分割成三段在签发token的载荷中,添加第一次签发token的时间,和刷新有效时间
(比如一小时刷新一次token,那么这一小时之内的访问就不需要签发新的token,而token的过期时间为一周,那么一小时之外一周之内的时间段内就需要不断刷新token,一直到过期时间后token失效)
每一次请求携带token,不仅走校验算法验证token是否合法,还要额外请求刷新token接口,如果超过刷新时间,则签发新的token,整体过期时间后移.(没有超过过期时间,产生新的token给客户端,超过了,刷新失败)
服务端要同时设置过期时间,还要设置刷新时间.
$ pip install djangorestframework-jwt
settings中
import datetime
JWT_AUTH = {
# 过期时间
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
# 是否允许刷新
'JWT_ALLOW_REFRESH': True,
# 最大刷新时间
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
}
标签:day 安全 这一 主键 数据 ali 合法性 pytho 校验
原文地址:https://www.cnblogs.com/agsol/p/12130870.html