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

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)

 

 

posted @ 2024-03-05 15:47  北京测试菜鸟  阅读(468)  评论(0编辑  收藏  举报