six_001
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import os
|
||||
|
||||
import django
|
||||
|
||||
from sixGuoDjango.settings import base_dir_name
|
||||
|
||||
|
||||
|
||||
os.environ.setdefault( key="DJANGO_SETTINGS_MODULE", value=f"{base_dir_name}.settings" )
|
||||
django.setup( )
|
||||
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
|
||||
from Crypto.PublicKey import RSA
|
||||
from django.conf import settings
|
||||
from jwt import JWT
|
||||
from jwt.jwk import jwk_from_pem
|
||||
from jwt.utils import get_int_from_datetime
|
||||
|
||||
|
||||
|
||||
# 创建 JWT 实例
|
||||
instance = JWT( )
|
||||
|
||||
# 创建 payload
|
||||
message = {
|
||||
'iss': 'my-app',
|
||||
'sub': 'user123',
|
||||
'name': '张三',
|
||||
'role': 'admin',
|
||||
'iat': get_int_from_datetime( datetime.now( timezone.utc ) ),
|
||||
'exp': get_int_from_datetime( datetime.now( timezone.utc ) + timedelta( hours=1 ) ),
|
||||
}
|
||||
|
||||
# ✅ 正确:使用私钥进行签名
|
||||
private_key_pem_私钥 = Path( "private.pem" ).read_bytes( )
|
||||
私钥对象 = RSA.import_key( extern_key=private_key_pem_私钥, passphrase=settings.SECRET_KEY ).export_key( )
|
||||
signing_key = jwk_from_pem( pem_content=私钥对象 )
|
||||
|
||||
token = instance.encode( message, signing_key, alg='RS256' ) # 注意算法名改为 RS256
|
||||
print( f"生成的 JWT: {token}" )
|
||||
|
||||
# ✅ 正确:使用公钥进行验证
|
||||
public_key_pem_公钥 = Path( "public.pem" ).read_bytes( )
|
||||
verifying_key = jwk_from_pem( pem_content=public_key_pem_公钥 )
|
||||
|
||||
# 解码验证 JWT
|
||||
received_message = instance.decode( message=token, key=verifying_key, do_time_check=True )
|
||||
print( f"解码后的消息: {received_message}" )
|
||||
Reference in New Issue
Block a user