📜  创建 RS256 JWT linux (1)

📅  最后修改于: 2023-12-03 15:22:40.213000             🧑  作者: Mango

创建 RS256 JWT Linux

什么是 JWT

JSON Web Token(JWT)是由 RFC7519 规范定义的开放标准,用于在网络应用间传递声明。JWT 可以被用作身份认证和授权。

JWT 由三部分组成:Header、Payload 和 Signature,它们都使用 Base64 编码,并通过.连接起来。Header 指定了在 JWT 中使用的加密算法,比如 RS256,而 Payload 包含了声明信息。Signature 用于验证 JWT 的完整性。

如何使用 RS256 加密算法创建 JWT

在 Linux 环境下,我们可以使用 OpenSSL 程序来创建 RSA 私钥和公钥对,然后使用私钥对 JWT 进行签名,使用公钥进行验证。

步骤 1:创建 RSA 私钥和公钥对

使用以下命令生成一个 2048 位的 RSA 私钥文件:

openssl genrsa -out private.pem 2048

然后,使用下面的语句从私钥中提取公钥并保存到 public.pem 文件中:

openssl rsa -in private.pem -outform PEM -pubout -out public.pem
步骤 2:创建 JWT

安装 Python 的 PyJWT 库后,我们可以使用以下代码创建一个包含 claims(即声明信息)的 JWT:

import jwt
import datetime

payload = {
    'sub': '1234567890',
    'name': 'John Doe',
    'iat': datetime.datetime.utcnow(),
    'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}

private_key_path = 'private.pem'

with open(private_key_path, 'r') as f:
    private_key = f.read()

token = jwt.encode(payload, private_key, algorithm='RS256')

其中,'sub' 表示主题(subject),'name' 表示名称,'iat' 表示 JWT 的签发时间,'exp' 表示 JWT 的过期时间。private_key_path 为 OpenSSL 生成的 RSA 私钥文件路径。

步骤 3:验证 JWT

使用以下代码来验证 JWT:

import jwt

token = '<your JWT string>'
public_key_path = 'public.pem'

with open(public_key_path, 'r') as f:
    public_key = f.read()

try:
    payload = jwt.decode(token, public_key, algorithms=['RS256'])
    print(payload)
except jwt.ExpiredSignatureError:
    print('Token has expired')
except jwt.InvalidTokenError:
    print('Token is invalid')

其中,token 为我们从其他应用获取的 JWT 字符串,public_key_path 为 OpenSSL 生成的 RSA 公钥文件路径。

如果 JWT 无效或已过期,将会抛出 jwt.InvalidTokenError 或 jwt.ExpiredSignatureError 异常。

以上就是在 Linux 环境下使用 RS256 算法创建和验证 JWT 的方法。在实际应用中,JWT 可以用于进行身份验证和授权,从而提高应用的安全性和可靠性。