python实现JWT

一、常见的几种实现认证的方法

1.1basic auth

1.2cookie

1.3token

json web token--一种基于token的json格式web认证方法。基本原理是,第一次认证通过用户名和面膜,服务端签发一个json格式的token,后续客户端的请求都带着这个token,服务端仅需要解析这个token,来判断客户端的身份和合法性。jwt协议只是规范了这个协议的格式,分为三个部分

1.3.1header头部

{'type':'JWT',   #声名类型,这里是JWT'alg':'HS256'  #声名加密的算法,通常为 HMAC  SHA256
}

再将其解析base64编码

1.3.2payload载荷

payload是放置实际有效信息的地方。jwt定义了几种内容,包括:标准中注册的声明,如签发者,接收者,有效时间(exp),时间戳(iat,issued at)等;为官方建议但非必须公共声明私有声明

  

#一个常见的payload
{'user_id':12345,'user_role':admin,'iat':14234234
}

 

// 包括需要传递的用户信息;
{ "iss": "Online JWT Builder",       #该JWT的签发者,是否使用是可选的;"iat": 1416797419,                #在什么时候签发的(UNIX时间),是否使用是可选的;"exp": 1448333419,                #什么时候过期,这里是一个Unix时间戳,是否使用是可选的;"aud": "www.gusibi.com",           #接收该JWT的一方,是否使用是可选的;"sub": "uid",                        #该JWT所面向的用户,是否使用是可选的;"nickname": "goodspeed", "username": "goodspeed", "scopes": [ "admin", "user" ]
}

  

 

1.3.3signature

  原理

// 根据alg算法与私有秘钥进行加密得到的签名字串;
// 这一段是最重要的敏感信息,只能在服务端解密;
HMACSHA256(  base64UrlEncode(header) + "." +base64UrlEncode(payload),SECREATE_KEY
)

第三部分是个签证信息,有三部分组成:header(base64后的)payload(base64后的)secret

存储了序列化的secreate key和salt key。这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。

 示例图:

二、认证需求

目标场景是一个前后端分离的后端系统,用于运维工作,虽在内网使用,也有一定的保密性要求API为restful+json的无状态接口,要求认证也是相同模式可横向扩展较低数据库压力证书可注销证书可自动延期
这样就选择JWT

三、JWT实现

如何生成token

import jwt
import time# 使用 sanic 作为restful api 框架
def create_token(request):grant_type = request.json.get('grant_type')username = request.json['username']password = request.json['password']if grant_type == 'password':account = verify_password(username, password)elif grant_type == 'wxapp':account = verify_wxapp(username, password)if not account:return {}payload = {"iss": "gusibi.com","iat": int(time.time()),"exp": int(time.time()) + 86400 * 7,"aud": "www.gusibi.com","sub": account['_id'],"username": account['username'],"scopes": ['open']}token = jwt.encode(payload, 'secret', algorithm='HS256')return True, {'access_token': token, 'account_id': account['_id']}def verify_bearer_token(token):#  如果在生成token的时候使用了aud参数,那么校验的时候也需要添加此参数payload = jwt.decode(token, 'secret', audience='www.gusibi.com', algorithms=['HS256'])if payload:return True, tokenreturn False, token

View Code

如何解析token

四、优化

总结

我们做了一个JWT的认证模块:
(access token在以下代码中为'token',refresh token在代码中为'rftoken')首次认证
client -----用户名密码-----------> serverclient <------token、rftoken----- serveraccess token存续期内的请求
client ------请求(携带token)----> serverclient <-----结果----------------- serveraccess token超时
client ------请求(携带token)----> serverclient <-----msg:token expired--- server重新申请access token
client -请求新token(携带rftoken)-> serverclient <-----新token-------------- serverrftoken token超时
client -请求新token(携带rftoken)-> serverclient <----msg:rftoken expired--- server如果设计一个针对此认证的前端,需要:存储access token、refresh token访问时携带access token,自动检查access token超时,超时则使用refresh token更新access token;状态延期用户无感知用户登出直接抛弃access token与refresh token

  

转载于:https://www.cnblogs.com/djfboai/p/10670714.html

python实现JWT相关推荐

  1. Python 生成 JWT(json web token) 及 解析方式

    一.关于 jwt 的原理及概念可以自行在网络上搜索了解一下,这里推荐一篇写的比较好的博客 深入了解Json Web Token之概念篇 另附 JWT 的官方文档: https://jwt.io/int ...

  2. 理解JWT(JSON Web Token)认证及python实践

    最近想做个小程序,需要用到授权认证流程.以前项目都是用的 OAuth2 认证,但是Sanic 使用OAuth2 不太方便,就想试一下 JWT 的认证方式. 这一篇主要内容是 JWT 的认证原理,以及p ...

  3. python token认证_理解JWT(JSON Web Token)认证及python实践

    最近想做个小程序,需要用到授权认证流程.以前项目都是用的 OAuth2 认证,但是Sanic 使用OAuth2 不太方便,就想试一下 JWT 的认证方式. 这一篇主要内容是 JWT 的认证原理,以及p ...

  4. 在吗?认识一下JWT(JSON Web Token) ?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:是虎子呀  地址:my.oschina.net/u/4062 ...

  5. 肝!一文讲解JWT用户认证全过程

    什么是JWT(what) JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,以JSON对象的形式在各方之间安全地传输信息. JWT是一个数字签名 ...

  6. jwt如何防止token被窃取_在吗?认识一下JWT(JSON Web Token)?

    什么是JSON Web Token ? 官网介绍: JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象 ...

  7. 用户修改了信息jwt服务器怎么识别,jwt验证登录信息

    为什么要告别session?有这样一个场景,系统的数据量达到千万级,需要几台服务器部署,当一个用户在其中一台服务器登录后,用session保存其登录信息,其他服务器怎么知道该用户登录了?(单点登录), ...

  8. python多用户登录_python多用户

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! logserver.logusermgr_log=.. logusermgr.l ...

  9. python3 jwt 模拟登录

    pip install jwt """ python 实现jwt """ import time import json import co ...

最新文章

  1. 魔法引用函数magic_quotes_gpc和magic_quotes_runtime的区别和用法
  2. word录入表单数据 java 导入系统,java导入excel | 怎么把excel中的数据批量导入到word中的表格中...
  3. python面试常见问题-Python面试常见的8个问题及答案总结
  4. 基于Boost::beast模块的协程WebSocket 服务器
  5. python指定位置写入文件_Python从文件中读取指定的行以及在文件指定位置写入
  6. keil写文字怎么会乱码_主持稿怎么写才会吸引人
  7. java 自定义登录态_java – 自定义HTTP状态代码
  8. Altium AD20批量修改丝印大小、更改丝印字体、丝印显示中文、更改位号丝印 相对元件的位置
  9. ubuntu14.04源无法更新--jdk安装出错解决方法
  10. Java 垃圾回收机制
  11. Rocketmq中Topic、Tag、GroupName的设计思想
  12. 爬虫python下载视频_利用python爬虫通过m3u8文件下载ts视频
  13. BottomBar之Android底部菜单
  14. HDU5144 NPY and shot BestCoder Round #22 1003
  15. 计算机键盘怎么输入平方,word里平方2怎么打_在word里输入㎡符号的方法
  16. 串的基本操作与KMP算法
  17. TypeScript简明教程
  18. WINVER 和 _WIN32_WINNT
  19. 发完牢骚和惆怅,就继续去看paper吧
  20. 展望下未来的计算机400字,展望未来作文400字

热门文章

  1. vue-cil解决开发环境的跨域问题
  2. 【动态规划】计蒜客:蒜头君的日志(最长递增公共子序列)
  3. oracle联机文档使用,Sqlplus 联机文档学习
  4. 使用阿里云镜像仓库构建国外 Docker 镜像
  5. 人脸识别撞脸名画_范冰冰深夜晒自拍撞脸荷兰名画,三万元名牌包抢镜,两套餐具亮了...
  6. Mybatis JdbcType与Oracle、MySql数据类型对应列表
  7. ECharts力导向布局图增加滚动条
  8. 2022牛客寒假算法基础集训营2 签到题7题
  9. 【PTA】 PAT乙级真题,95题(C++,AC代码)
  10. 【NOIP2002】【codevs1010】过河卒