jwt令牌的签名算法
时间: 2025-01-11 10:44:30 浏览: 39
JWT 令牌支持的签名算法
JWT 令牌支持多种类型的签名算法来确保其安全性和完整性。主要分为两类:基于哈希的消息认证码 (HMAC) 和公钥/私钥对的非对称加密。
HMAC 算法
HMAC 是一种使用密钥进行消息认证的机制,常用于对称加密场景下。对于 JWT 来说,最常用的 HMAC 算法是 HS256,即采用 SHA-256 散列函数[^1]。这种情况下,发送方和接收方共享同一个秘密密钥,用来创建和验证签名。
import jwt
import datetime
secret_key = 'your_secret'
payload = {
'sub': "1234567890",
'name': "John Doe",
'iat': datetime.datetime.utcnow(),
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=60)
}
token = jwt.encode(payload, secret_key, algorithm='HS256')
print(token.decode('utf-8'))
非对称加密算法
除了 HMAC 外,还可以利用 RSA 或 ECDSA 这样的非对称加密方法来进行签名操作。这类算法的特点在于拥有两个不同的密钥——公钥和私钥;其中私钥仅由发行者持有并用于生成签名,而任何人都可以通过对应的公开可用的公钥来校验签名的有效性[^2]。
RS256 - 使用 RSA 密钥对
RS256 是指使用 RSA 加密算法配合 SHA-256 散列函数作为签名方案的一种形式。这种方式适合那些希望在不同服务间传递信任关系的应用程序环境之中。
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
backend=default_backend()
)
pem = private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption()
)
public_key = private_key.public_key().public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
token = jwt.encode(payload, pem, algorithm='RS256', headers={'kid': 'my-key-id'})
print(token.decode('utf-8'))
ES256 - 使用椭圆曲线数字签名算法(ECDSA)
ES256 利用了更高效的椭圆曲线密码学(ECC),提供了相同级别的安全性却只需要较短长度的密钥,在移动设备上尤其受欢迎[^3]。
from ecdsa import SigningKey, NIST256p
sk = SigningKey.generate(curve=NIST256p)
vk = sk.verifying_key
signing_string = json.dumps({
'alg': 'ES256',
'typ': 'JWT'
}).encode()
signature = base64url_encode(sk.sign(signing_string))
header_and_payload_b64 = '.'.join([
base64url_encode(json.dumps({'alg': 'ES256'}).encode()),
base64url_encode(json.dumps(payload).encode())
])
final_token = f"{header_and_payload_b64}.{base64url_encode(signature)}"
print(final_token)
相关推荐


















