JWT

Json Web Token(JWT)

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在两个组织之间传递安全可靠的信息。

官方定义:JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties

JWT是一个有着简单的统一表达形式的字符串:

头部(Header)

头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。 JSON内容要经Base64 编码生成字符串成为Header。

载荷(PayLoad)

payload的五个字段都是由JWT的标准所定义的。

  1. iss: 该JWT的签发者
  2. sub: 该JWT所面向的用户
  3. aud: 接收该JWT的一方
  4. exp(expires): 什么时候过期,这里是一个Unix时间戳
  5. iat(issued at): 在什么时候签发的

后面的信息可以按需补充。 JSON内容要经Base64 编码生成字符串成为PayLoad。

签名(signature)

这个部分header与payload通过header中声明的加密方式,使用密钥secret进行加密,生成签名。 JWS的主要目的是保证了数据在传输过程中不被修改,验证数据的完整性。但由于仅采用Base64对消息内容编码,因此不保证数据的不可泄露性。所以不适合用于传输敏感数据。

JWT的Python库

独立的JWT Python库

安装

  •   $ pip install pyjwt

用例

  •   >>> import jwt
    
      >>> encoded_jwt = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
    >>> encoded_jwt
    'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg' >>> jwt.decode(encoded_jwt, 'secret', algorithms=['HS256'])
    {'some': 'payload'}

示例代码:产生与校验

import jwt from flask import current_app   
def generate_jwt(payload, expiry, secret=None):     
"""     生成jwt     
:param payload: dict 载荷     
:param expiry: datetime 有效期     
:param secret: 密钥     
:return: jwt     
"""    
 _payload = {'exp': expiry}     
_payload.update(payload)      
if not secret:         
secret = current_app.config['JWT_SECRET']      
token = jwt.encode(_payload, secret, algorithm='HS256')     
return token.decode()   def verify_jwt(token, secret=None):     
"""     检验jwt     :param token: jwt     :param secret: 密钥     :return: dict: payload     """     
if not secret:         
secret = current_app.config['JWT_SECRET']      
try:         
payload = jwt.decode(token, secret, algorithm=['HS256'])     
except jwt.PyJWTError:        
 payload = None      
return payload

最新文章

  1. .NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式
  2. 【BZOJ-1857】传送带 三分套三分
  3. 随便2--struct pointer
  4. Python学习笔记-Day3-python关键字
  5. Puppet
  6. 打开Openstack dashboard出现Internal Server Error
  7. 运行容器的最佳实践 - 每天5分钟玩转 Docker 容器技术(24)
  8. react入门到进阶(三)
  9. Docker搭建MongoDB
  10. intellij idea 相关设置
  11. Python3网络爬虫(四):使用User Agent和代理IP隐藏身份《转》
  12. 251. Flatten 2D Vector 平铺二维矩阵
  13. 【AtCoder】ARC083
  14. leetcode 两数之和 II - 输入有序数组
  15. 学习Android Studio里的Gradle
  16. YC全球总裁:我招揽陆奇好多年,如今终于如愿了!
  17. 使用getid3获取音频文件信息
  18. 深入了解View的绘制流程
  19. MySQL性能调优思路
  20. 基于任务的异步编程模式,Task-based Asynchronous Pattern

热门文章

  1. 开发一个基础的npm包
  2. ajax的封装——jq简化版
  3. sql 数据库操作语句 不带select
  4. NCEP CFSR数据下载
  5. JAVA常见面试题问题简述(持续更新中)
  6. 一文摸透从输入URL到页面渲染的过程
  7. ATM购物车+三层结构项目设计
  8. 手工注入——sql server (mssql)注入实战和分析
  9. Vmware安装CentOs7.4
  10. python--Django(后台管理模块)