首页 > 编程语言 >python-jose,一个好用的 Python 库!

python-jose,一个好用的 Python 库!

时间:2024-03-05 15:56:44浏览次数:21  
标签:jose python jwt JWT secret Python token key

python-jose介绍:

  在做接口测试或者接口自动化测试中,身份验证和授权是很重要的一部分。JSON Web Token(JWT)是一种流行的身份验证和授权解决方案,它能够安全地在网络中传输信息。python-jose 库是Python中处理JWT的强大工具,提供了丰富的功能和灵活的接口,能够轻松地处理JWT的生成、验证和解析。深入学习下 python-jose 库的使用方法、功能特性以及如何利用它来处理JWT。

 

什么是python-jose库?

python-jose是一个Python库,用于处理JSON Web Token(JWT)。JWT是一种用于在网络中安全传输信息的令牌,它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。python-jose库提供了一组功能,用于创建、解析和验证JWT,同时还支持与不同算法和密钥格式的集成。

安装python-jose库

pip install python-jose 

使用python-jose库

首先,需要创建一个JWT并使用 HS256 算法进行签名。

from jose import jwt

# 创建Payload
payload = {"user_id": "1234", "user_name": "Python"}

# 签名密钥
secret_key = "my_test_key_values"

# 生成JWT
token = jwt.encode(payload, secret_key, algorithm='HS256')

print("JWT Token:", token)

  

python-jose库的功能特性

1. 支持多种算法

python-jose库支持多种加密算法,包括HS256、RS256等,让用户能够根据需求选择合适的算法进行签名和验证。

import rsa
from jose import jwt

# 生成RSA密钥对
(private_key, public_key) = rsa.newkeys(2048)

# 创建Payload
payload = {"user_id": "1234", "user_name": "Python"}

# 使用哈希256生成的私钥进行签名
token = jwt.encode(payload, public_key, algorithm='RS256')
print(token)

# 使用哈希256生成的公钥进行验证
decoded_token = jwt.decode(token, private_key, algorithms=['RS256'])
print(decoded_token)

  

from jose import jwt

# 创建Payload
payload = {"user_id": "1234", "user_name": "Python"}

# 签名密钥
secret_key = "my_test_key_values"
# 使用HS256算法进行签名
token = jwt.encode(payload, secret_key, algorithm='HS256')
print(token)

# 使用HS256算法进行验证
decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])
print(decoded_token)

  

2. 提供丰富的验证选项

python-jose库提供了丰富的选项来验证JWT,包括过期时间、签发者、接收者等,确保JWT的安全性和可靠性。

from jose import jwt

# 创建Payload
payload = {"user_id": "1234", "user_name": "Python"}

# 签名密钥
secret_key = "my_test_key_values"
# 使用HS256算法进行签名
token = jwt.encode(payload, secret_key, algorithm='HS256')
print(token)

decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'], options={'verify_exp': True, 'verify_iss': True})
print(decoded_token)

  

3. 支持JWK(JSON Web Key)

python-jose库支持JWK格式的密钥,使得用户能够更灵活地管理密钥,包括使用对称密钥、RSA密钥等。

import rsa
from jose import jwt

# 生成RSA密钥对
(private_key, public_key) = rsa.newkeys(2048)

# 创建Payload
payload = {"user_id": "1234", "user_name": "Python"}


# 使用JWK格式的密钥进行签名
token = jwt.encode(payload, public_key, algorithm='RS256')
print(token)

# 使用JWK格式的密钥进行验证
decoded_token = jwt.decode(token, private_key, algorithms=['RS256'])
print(decoded_token)

  

python-jose库的应用场景

python-jose是一个用于处理JSON Web Token(JWT)的Python库,它提供了丰富的功能和灵活的接口,使得开发者能够轻松地处理JWT的生成、验证和解析。以下是一些常见的应用场景。

1. 用户身份验证和授权

python-jose库可以用于构建用户身份验证和授权系统,通过生成和验证JWT来管理用户的身份信息和访问权限。

from jose import jwt

# 创建Payload
payload = {"user_id": 1, "name": "admin"}

# 签名密钥
secret_key = "my_secret_key"

# 生成JWT
token = jwt.encode(payload, secret_key, algorithm='HS256')
print("JWT Token:", token)

# 验证JWT
decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])
print("Decoded Token:", decoded_token)

  

2. Web应用的会话管理

python-jose库也可以用于在Web应用中管理用户会话,通过JWT来跟踪用户的登录状态和会话信息。

下面是一个简单的示例代码:

from jose import jwt

# 创建Payload
payload = {"user_id": 1, "login_status": True}

# 签名密钥
secret_key = "my_secret_key"

# 生成JWT
token = jwt.encode(payload, secret_key, algorithm='HS256')
print("JWT Token:", token)

# 验证JWT
decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])
print("Decoded Token:", decoded_token)

  

3. API访问控制

python-jose库还可以用于构建API访问控制系统,通过JWT来验证API请求的合法性和权限。

下面是一个简单的示例代码:

from jose import jwt

# 创建Payload
payload = {"user_id": 1, "name": 'admin'}

# 签名密钥
secret_key = "my_secret_key"


# 生成JWT
def create_token():
    return jwt.encode(payload, secret_key, algorithm='HS256')


# 获取JWT Token
token = create_token()

# 验证JWT
decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])

# 检查用户权限
if 'admin' in decoded_token['name']:
    # 执行管理员操作
    print("是 admin")
else:
    # 返回权限错误
    print("不是 admin")

  

4. 单点登录

python-jose库还可以用于构建单点登录系统,通过JWT来实现在多个应用之间的用户身份认证和授权。

下面是一个简单的示例代码:

from jose import jwt

# 创建Payload
payload = {"user_id": 123, "roles": ["admin", "user"]}

# 签名密钥
secret_key = "my_secret_key"

# 生成JWT
token = jwt.encode(payload, secret_key, algorithm='HS256')
print("JWT Token:", token)

# 在其他应用中验证JWT并获取用户信息
decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])
user_id = decoded_token['user_id']
roles = decoded_token['roles']
print("User ID:", user_id)
print("Roles:", roles)

  

5. 客户端认证

python-jose库还可以用于客户端认证,通过JWT来验证客户端的身份和权限。

下面是一个简单的示例代码:

from jose import jwt

# 创建Payload
payload = {"client_id": "client123", "scope": "read write"}

# 签名密钥
secret_key = "my_secret_key"

# 生成JWT
token = jwt.encode(payload, secret_key, algorithm='HS256')
print("JWT Token:", token)

# 在服务端验证JWT并执行客户端请求
decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])
client_id = decoded_token['client_id']
scope = decoded_token['scope']
print("Client ID:", client_id)
print("Scope:", scope)

 

 

标签:jose,python,jwt,JWT,secret,Python,token,key
From: https://www.cnblogs.com/pywen/p/18054076

相关文章

  • python turtle相关
    一、简介二、内容三、问题 一、简介最近需要考计算机二级python,然后里面出现了平时基本没用到的turtle,在这里做一下复习总结。turtle,  是Python中用来绘图的标准库,它总体上讲,就是控制一只乌龟在纸上画画,控制它的朝向,笔粗细,填充。二、内容以下,按书上......
  • Python 生成随机字符串
    0x00吐槽最近让项目坑的没办法,老写一些脚本来协助工作,刚好在测试python生成word的时候遇到需要随机字符串来命名文档名,简单写点东西记录一下0x01一班的童靴其实随机字符串这个东西在任何语言里都经常会用到,而且解决方法也简单首先定义一个字符串,随机字符串就从这里面取,然......
  • vsc 如何调试远程python代码
    1、远程python环境准备下载minicondahttps://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/注意py版本,需要下载对应版本的conda,找到对应的版本后(这里选择py312),鼠标右键复制链接wget 相关链接bash xxx.sh  按提示操作就行。最后一个提示可能是:是......
  • Python:如何风骚而又不失优雅的使用Switch...Case
    本渣PHP屌丝一枚,最近在用Python做一个东西碰到了这个问题,在这里给没踩过坑的朋友分享下以Python2.7为例从前有座山碰到参数特别多的情况的时候总是看着一堆if...elseif抓狂,斩不断,理还乱,幸好有Switch...Case可以很方便的处理多种情况的参数但是在Python中没有Switch...Case......
  • 1.Python3 基础语法
    Python3基础语法Python3中文官方文档https://docs.python.org/zh-cn/3.9/Python标准库https://docs.python.org/zh-cn/3.9/library/index.html1.Python保留字保留字即关键字,我们不能把它们用作任何标识符名称。Python的标准库提供了一个keyword模块,可以输出当前版本的......
  • 3.Python3 流程控制
    Python3流程控制和其它编程语言一样,按照执行流程划分,Python程序也可分为3大结构,即顺序结构、选择(分支)结构和循环结构:Python顺序结构就是让程序按照从头到尾的顺序依次执行每一条Python代码,不重复执行任何代码,也不跳过任何代码。Python选择结构也称分支结构,就是让程序......
  • 2.Python3 基本数据类型
    Python3基本数据类型python是弱类型语言,弱类型语言有两个特点:变量无须声明就可以直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。变量的数据类型可以随时改变,比如,同一个变量可以一会儿被赋值为整数,一会儿被赋值为字符串。弱类型并不等于没有类型!弱类型是说在书写......
  • 7.Python3 函数
    Python3函数函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。1.函数定义Python定义函数使用def关键字,一般格......
  • 6.Python3 迭代器与生成器
    Python3迭代器与生成器1.迭代器迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器迭代器的定义字面意思:更新迭代,器:工具:可更新迭代的工具。专业角度:内部含有'__iter__'方法并且含......
  • 5.Python3 推导式
    Python3推导式推导式(comprehensions),又称解析式,是Python中常见的语法糖。推导式可以从一个数据序列构建另一个新的数据序列,常用于数据处理场景。表达式for迭代变量in可迭代对象[if条件表达式]其中if条件判断根据需要,可有可无。Python支持各种数据结构的推导式:列......