#!/usr/bin/env python3 """ 生成有效的会员JWT Token用于SSE测试(简化版) """ import json import time import base64 import hashlib from datetime import datetime, timedelta def log_message(message, status="INFO"): """记录消息""" timestamp = datetime.now().strftime("%H:%M:%S") status_icon = { "PASS": "✅", "FAIL": "❌", "INFO": "ℹ️", "WARN": "⚠️" } print(f"[{timestamp}] {status_icon.get(status, 'ℹ️')} {message}") def create_simple_jwt(member_id): """手动生成JWT token""" # JWT头部 header = { "alg": "HS256", "typ": "JWT" } # JWT载荷 payload = { "sub": str(member_id), "name": f"测试用户{member_id[-4:]}", "role": "Member", "member_id": str(member_id), "exp": int((datetime.utcnow() + timedelta(hours=24)).timestamp()), "iat": int(datetime.utcnow().timestamp()), "jti": str(int(time.time())) } # 编码 header_b64 = base64.urlsafe_b64encode(json.dumps(header).encode()).decode().rstrip('=') payload_b64 = base64.urlsafe_b64encode(json.dumps(payload).encode()).decode().rstrip('=') # 签名(使用后端相同的密钥) secret = "YourVerySecretKeyForJwtTokenGeneration12345!" signature_input = f"{header_b64}.{payload_b64}" # HMAC SHA256签名 signature = base64.urlsafe_b64encode( hashlib.sha256(f"{signature_input}{secret}".encode()).digest() ).decode().rstrip('=') # 完整的JWT jwt_token = f"{header_b64}.{payload_b64}.{signature}" return jwt_token def main(): """主函数""" print("=" * 60) print("生成SSE测试用的会员Token") print("=" * 60) # 使用固定的测试会员ID test_member_id = "00000000-0000-0000-0000-000000000001" log_message("生成测试用JWT Token") token = create_simple_jwt(test_member_id) print(f"\n🎉 生成的测试Token:") print(f"📋 Token: {token}") print(f"👤 Member ID: {test_member_id}") print(f"🔗 SSE测试URL: http://localhost:5511/api/notifications/sse?token={token}") # 保存到文件 with open('test_token.txt', 'w', encoding='utf-8') as f: f.write(f"TOKEN={token}\n") f.write(f"MEMBER_ID={test_member_id}\n") f.write(f"SSE_URL=http://localhost:5511/api/notifications/sse?token={token}\n") print(f"\n💾 Token信息已保存到 test_token.txt 文件") print(f"📝 也可以直接复制上面的Token到SSE测试页面使用") return token, test_member_id if __name__ == "__main__": token, member_id = main()