PhysicsCorrection/assets/extract_workspace_id.py

125 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
从 JWT Token 中提取 Workspace ID
"""
import json
import base64
import sys
def extract_workspace_id(token):
"""
从 JWT Token 中提取 Workspace ID
Args:
token: JWT Token带或不带 "Bearer " 前缀)
Returns:
workspace_id: 工作区 ID
"""
try:
# 移除 "Bearer " 前缀
if token.startswith("Bearer "):
token = token[7:]
# 分割 JWT
parts = token.split(".")
if len(parts) != 3:
print("❌ Token 格式错误:应该是 JWT 格式header.payload.signature")
return None
# 解码 payload
payload_b64 = parts[1]
# 添加 padding
padding = 4 - len(payload_b64) % 4
if padding != 4:
payload_b64 += "=" * padding
payload = json.loads(base64.b64decode(payload_b64))
# 显示 Token 信息
print("\n" + "=" * 80)
print("JWT Token 信息")
print("=" * 80)
print(f"Issuer (iss): {payload.get('iss')}")
print(f"Audience (aud): {payload.get('aud')}")
print(f"Subject (sub): {payload.get('sub')}")
print(f"Expires (exp): {payload.get('exp')}")
print(f"Issued At (iat): {payload.get('iat')}")
print(f"Source (src): {payload.get('src')}")
print()
# 提取 workspace_id
sub = payload.get('sub', '')
# 尝试不同的格式
if 'workload_identity/id:' in sub:
workspace_id = sub.split('workload_identity/id:')[-1]
print(f"✅ 格式 1: workload_identity/id:{workspace_id}")
elif 'workspace/id:' in sub:
workspace_id = sub.split('workspace/id:')[-1]
print(f"✅ 格式 2: workspace/id:{workspace_id}")
else:
# 尝试直接使用 sub
workspace_id = sub
print(f"⚠️ 格式 3: 直接使用 sub: {workspace_id}")
print()
print("=" * 80)
print(f"🔑 提取的 Workspace ID: {workspace_id}")
print("=" * 80)
print()
return workspace_id
except Exception as e:
print(f"❌ 解析 Token 失败: {str(e)}")
return None
def main():
print()
print("=" * 80)
print("Workspace ID 提取工具")
print("=" * 80)
print()
# 方式 1从环境变量读取
token = None
# 1. 尝试从命令行参数读取
if len(sys.argv) > 1:
token = sys.argv[1]
# 2. 尝试从环境变量读取
else:
token = __import__('os').environ.get('COZE_API_KEY')
if not token:
print("❌ 未找到 Token")
print()
print("使用方法:")
print(" 方式 1: python extract_workspace_id.py 'Bearer eyJhbGci...'")
print(" 方式 2: COZE_API_KEY='Bearer eyJhbGci...' python extract_workspace_id.py")
print()
return 1
# 提取 workspace_id
workspace_id = extract_workspace_id(token)
if workspace_id:
print()
print("✅ 提取成功!")
print()
print("下一步:")
print(f"1. 在 docker-compose.yml 中设置:")
print(f" COZE_WORKSPACE_ID={workspace_id}")
print()
return 0
else:
print()
print("❌ 提取失败,请检查 Token 格式")
print()
return 1
if __name__ == "__main__":
sys.exit(main())