token 生成详解
token就是一种身份验证方法,和cookie有相似作用;它被很多人翻译过来后生动的称为“令牌”,它的扩展性,安全性更高,非常适合用在Web应用和移动开发应用上。
token验证流程
使用token身份验证,服务器端就不会存储用户的登录记录。
客户端使用用户名跟密码请求登录;
服务端收到请求,去验证用户名与密码;验证成功后,服务端会签发一个 Token,
再把这个 Token 发送给客户端;
客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。
token 生成的方法有很多 我们一般常用Jwt来生成这个token
jwt的组成部分
标准的jwt令牌分为三部分,分别是Header、payload、signature;
第一部分:header
#一般固定如下 {'typ': 'JWT', 'alg': 'HS256' } base64编码 ,并替换=号---> "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"
第二部分: payload
{'id': user.id,'username': user.username,‘exp’: time.time() + 300, #过期时间 } base64编码-> "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZvaG4gRGdWV9"
第一部分和第二部分, 可以被其他人使用base64解密,不建议存储敏感信息
第三部分: 前两部分的编码串通过 ‘.’ 连接,得到如下:
temp = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZvaG4gRGdWV9"
然后使用第一部分 声明的算法HS256进行加密,得到如下:
import hmac h = hmac.new(b'key', temp.encode(), digestmod='SHA256') sign = base64.urlsafe_b64encode(h.digest())
最后三者拼接:1.2.3
代码演示
import base64
import hmac
import json
import timeimport hmacheader = {"typ": 'JWT', 'alg': "HS256"}# 将header字典 转为 json字符串
header_str = json.dumps(header)# print("header_str:", header_str, type(header_str))# 对header进行base64编码
header_encode = base64.urlsafe_b64encode(header_str.encode())print("编码的结果:", header_encode)# 替换= 为 空字符
header_p1 = header_encode.replace(b"=", b"")payload = {"username": 'laufing', 'uid': 3, 'exp': time.time() + 300}# 对payload进行base64编码
payload_p2 = base64.urlsafe_b64encode(json.dumps(payload).encode()).replace(b"=", b"")# 获取第三部分
# 先拼接前两部分
temp = header_p1 + b"." + payload_p2
# hash 加密
temp_hash = hmac.new(b"123", temp, digestmod="SHA256")print("加密的二进制结果:", temp_hash.digest())
print("加密的十六进制结果:", temp_hash.hexdigest())# base64 编码
signature = base64.urlsafe_b64encode(temp_hash.digest()).replace(b"=", b"")# 最后三者拼接
jwt_token = (header_p1 + b"." + payload_p2 + b"." + signature).decode()print("jwt token:", jwt_token)
token 生成详解相关推荐
- 微信小程token_微信小程序url与token设置详解
微信小程序url与token设置详解 新浪云应用sae的代码里创建一个weixin.php文件,写入以下代码 isValid(); class wechatAPI { public function ...
- python 参数拼接token_对python的unittest架构公共参数token提取方法详解
额...每个请求都有token值的传入,但是token非常易变,一旦变化,所有的接口用例都得改一遍token,工作量太大了... 那么有没有一种方法能把token提取出来,作为一个全局变量,作为一个参 ...
- 史上最全Apidoc文档生成详解
api接口文档生成(apidoc基本使用) 基本步骤 1). 安装apidoc (前提:在node环境下) npm i apidoc -g 2). 在项目的根目录配置 创建apidoc.json文件 ...
- IdentityServer4实战 - JWT Token Issuer 详解
一.前言 本文为系列补坑之作,拖了许久决定先把坑填完. 下文演示所用代码采用的 IdentityServer4 版本为 2.3.0,由于时间推移可能以后的版本会有一些改动,请参考查看,文末附上Demo ...
- 手机app端token的详解很详细了
token是什么? token是服务端生成的一串字符串,以作客户端进行请求的一个令牌.当第一次登陆后,服务器生成一个token便将此token返回个客户端,以后客户端只需带上这个token前来请求数据 ...
- TOKEN 验证详解
为什么使用token验证 在web领域基于token的身份验证随处可变,在大多说使用web API的互联网公司中,tokens是多用户下处理认证的最佳方式 一下几点特性会让你在程序中使用基于Token ...
- oracle access manager token,Laravel 自带的 API 守卫驱动 token 使用详解
在Laravel框架中,默认的用户认证守卫有两个,web和api,web守卫默认的驱动是session,而api守卫默认的驱动是token.那么,该如何使用这个token驱动? 寻找 TokenGua ...
- 微信公众开发URL和token填写详解
作为一名微信公众号开发者,别人进入你的微信公众号,肯定会看见某些网页,或者给你发某些信息,你需要实时自动回复,所以你需要一个24小时为用户服务的服务器.我们所要填写的url就是你提供的服务器的地址,前 ...
- geojson在线生成工具_logofree详解:LOGO设计在线生成
未了解行情的人可能会问LOGO设计在线生成是什么?了解的人还会问LOGO设计在线生成好不好?那今天logofree就从多方面去详解LOGO设计在线生成,让你对LOGO设计在线生成了解得明明白白. ...
最新文章
- PCL:拟合平面直线和曲线以及空间曲线的原理到算法实现
- 定义自己的rm command
- 腾讯35亿美元抄底收购搜狗,产品张小龙和技术王小川双剑合璧
- 【arduino】RFID门禁刷卡模块RFID-RC522
- java--面向对象(4)--黑马程序员
- Oracle函数初探
- 新一代网络模式Web 2.0火爆发展
- RabbitMQ详解(一)
- Eclipse Debug不能热部署解决
- 如何提升 CSS 性能的小知识
- linux内存管理(十三)-内存规整过程分析
- BZOJ1588: [HNOI2002]营业额统计
- 《整理的艺术》读书笔记
- 基于GD库的php验证码类(支持中英文字体、背景、干扰点线、扭曲…….)
- 两年数据对比柱形图_你与专业堆积柱形图的距离,只差一个数据标签
- 惠普服务器装centos 系统安装,hp 服务器安装linux系统安装
- lucas–kanade_Lucas–Kanade光流算法
- matlab无法打开wps的xls文件,xls文件怎么打开,wps无法打开xls文件怎么办
- 篮球爱好和程序的结合:C#生成NBA赛事预告页面
- 微信群机器人(仿真企业微信群机器人)
热门文章
- 华中科技大学计算机考纲,华中科技大学考试大纲
- 2022预推免上岸北京大学计算机学院,我的一些保研经验
- dc是什么游戏的简称_“DC”是哪种国际卡的简称()A.VISAB.万事达C.运通D.大来
- 腾讯沙盒游戏计算机,腾讯新作沙盒创造类游戏,在这里你就是创世主,它会打动你的心吗...
- Google Earth Engine(GEE)—如何新增一个图例在Map面板
- 有软件测试台式电脑电源供电不足吗,电脑电源供电不足惹起的六种觉见故障
- 全球首颗量子卫星炼成记:“墨子号”打造保密通信新产业
- 佳能Canon PIXMA iP2880 打印机驱动
- escape()与unescape()
- Jdbc小项目:员工工管理系统