赞
踩
Token可以理解为一种特殊的加密密码或者暗号;只有暗号匹配才能通过,否则就是“敌人”;
我们在登录XX站点,XX系统都需要输入自己的用户名和密码;但是在接口调用过程中,为了账号加密安全性,不能明文将账号密码放入到请求体或请求头中;
所以需要一种加密方式—暗号,这种暗号格式可以自己定义,那么只有“自己人”知道;
从而达到加密安全调用和请求对方接口;
1、正常输入账号密码的请求过程:
1)登录页面登录后,服务端会生成token返回给客户端并缓存;
2)后续操作业务页面,会默认带上缓存的token;从而能对上暗号,实现正常的请求;
2、调用接口直接请求服务端,可以使用2中方法:
1)调用登录接口后,获得返回的token,在后续请求头或者url中带上token;
2)知道加密盐后,生成token,在接口请求中带上生成的token;
Token的格式可以自行约定,如下就是一个较简单的Token
- {
- "iss": "xx应用",
- "iat": 1702xxxxx,
- "jti": "0AC3291A-88E9-017D-DF00-9CE0ECC29446",
- "u": "admin",
- "c": "",
- "a": "Mysoft",
- "t": "xxxxxxxx"
- }
Token为了安全性,一次生成的token只能使用一次,下次使用需要按照规则重新生成;所以在以上的token中加入了时间戳(iat)和 uuid(jti);
时间戳:是为了限制token有效期
uuid:是为了限制token使用次数,如果两次请求的id相同,那么服务端就会自动判断token无效;
所以我们自己要封装token,基于以上这个案例,我们需要每次动态生成时间戳和uuid
如下是python代码实现的基于jwt的token封装:
token分为三部分:data(数据)、secret(盐)、algorithm(加密方式)
分四步实现:
1、准备data
2、替换时间戳和uuid
3、准备加盐,此为实现服务端约定好的秘钥
4、加密生成最终token
- # jwt生成token
- def newToken(tenantName):
- # 1、token格式模板
- ds = '{"iss": "xxx应用","iat": 1702xxxx,"jti": "0AC3291A-88E9-017D-DF00-9CE0ECCxxxxx","u": "admin","c": "","a": "Mxxxx","t": "ompseyxxxx"}'
- 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 = 'ff483a6526xxxxxx5'
- # 4、加密生成token
- token = jwt.encode(payload, secret, algorithm='HS256')
- # print(token)
- # Authorization = 'Bearer '+token
- return token

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。