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 生成详解相关推荐

  1. 微信小程token_微信小程序url与token设置详解

    微信小程序url与token设置详解 新浪云应用sae的代码里创建一个weixin.php文件,写入以下代码 isValid(); class wechatAPI { public function ...

  2. python 参数拼接token_对python的unittest架构公共参数token提取方法详解

    额...每个请求都有token值的传入,但是token非常易变,一旦变化,所有的接口用例都得改一遍token,工作量太大了... 那么有没有一种方法能把token提取出来,作为一个全局变量,作为一个参 ...

  3. 史上最全Apidoc文档生成详解

    api接口文档生成(apidoc基本使用) 基本步骤 1). 安装apidoc (前提:在node环境下) npm i apidoc -g 2). 在项目的根目录配置 创建apidoc.json文件 ...

  4. IdentityServer4实战 - JWT Token Issuer 详解

    一.前言 本文为系列补坑之作,拖了许久决定先把坑填完. 下文演示所用代码采用的 IdentityServer4 版本为 2.3.0,由于时间推移可能以后的版本会有一些改动,请参考查看,文末附上Demo ...

  5. 手机app端token的详解很详细了

    token是什么? token是服务端生成的一串字符串,以作客户端进行请求的一个令牌.当第一次登陆后,服务器生成一个token便将此token返回个客户端,以后客户端只需带上这个token前来请求数据 ...

  6. TOKEN 验证详解

    为什么使用token验证 在web领域基于token的身份验证随处可变,在大多说使用web API的互联网公司中,tokens是多用户下处理认证的最佳方式 一下几点特性会让你在程序中使用基于Token ...

  7. oracle access manager token,Laravel 自带的 API 守卫驱动 token 使用详解

    在Laravel框架中,默认的用户认证守卫有两个,web和api,web守卫默认的驱动是session,而api守卫默认的驱动是token.那么,该如何使用这个token驱动? 寻找 TokenGua ...

  8. 微信公众开发URL和token填写详解

    作为一名微信公众号开发者,别人进入你的微信公众号,肯定会看见某些网页,或者给你发某些信息,你需要实时自动回复,所以你需要一个24小时为用户服务的服务器.我们所要填写的url就是你提供的服务器的地址,前 ...

  9. geojson在线生成工具_logofree详解:LOGO设计在线生成

    未了解行情的人可能会问LOGO设计在线生成是什么?了解的人还会问LOGO设计在线生成好不好?那今天logofree就从多方面去详解LOGO设计在线生成,让你对LOGO设计在线生成了解得明明白白. ​ ...

最新文章

  1. PCL:拟合平面直线和曲线以及空间曲线的原理到算法实现
  2. 定义自己的rm command
  3. 腾讯35亿美元抄底收购搜狗,产品张小龙和技术王小川双剑合璧
  4. 【arduino】RFID门禁刷卡模块RFID-RC522
  5. java--面向对象(4)--黑马程序员
  6. Oracle函数初探
  7. 新一代网络模式Web 2.0火爆发展
  8. RabbitMQ详解(一)
  9. Eclipse Debug不能热部署解决
  10. 如何提升 CSS 性能的小知识
  11. linux内存管理(十三)-内存规整过程分析
  12. BZOJ1588: [HNOI2002]营业额统计
  13. 《整理的艺术》读书笔记
  14. 基于GD库的php验证码类(支持中英文字体、背景、干扰点线、扭曲…….)
  15. 两年数据对比柱形图_你与专业堆积柱形图的距离,只差一个数据标签
  16. 惠普服务器装centos 系统安装,hp 服务器安装linux系统安装
  17. lucas–kanade_Lucas–Kanade光流算法
  18. matlab无法打开wps的xls文件,xls文件怎么打开,wps无法打开xls文件怎么办
  19. 篮球爱好和程序的结合:C#生成NBA赛事预告页面
  20. 微信群机器人(仿真企业微信群机器人)

热门文章

  1. 华中科技大学计算机考纲,华中科技大学考试大纲
  2. 2022预推免上岸北京大学计算机学院,我的一些保研经验
  3. dc是什么游戏的简称_“DC”是哪种国际卡的简称()A.VISAB.万事达C.运通D.大来
  4. 腾讯沙盒游戏计算机,腾讯新作沙盒创造类游戏,在这里你就是创世主,它会打动你的心吗...
  5. Google Earth Engine(GEE)—如何新增一个图例在Map面板
  6. 有软件测试台式电脑电源供电不足吗,电脑电源供电不足惹起的六种觉见故障
  7. 全球首颗量子卫星炼成记:“墨子号”打造保密通信新产业
  8. 佳能Canon PIXMA iP2880 打印机驱动
  9. escape()与unescape()
  10. Jdbc小项目:员工工管理系统