Spaces:
Running
Running
Upload 3 files
Browse files
安全认证.py
CHANGED
|
@@ -34,10 +34,7 @@ _DEFAULT_PASSWORD_SALT = "ComfyUI-Ranking-Salt-v1"
|
|
| 34 |
JWT_SECRET = os.environ.get("JWT_SECRET") or _DEFAULT_JWT_SECRET
|
| 35 |
PASSWORD_SALT = os.environ.get("PASSWORD_SALT") or _DEFAULT_PASSWORD_SALT
|
| 36 |
|
| 37 |
-
|
| 38 |
-
print("⚠️ [安全认证] JWT_SECRET 未设置环境变量,使用内置默认值(建议生产环境配置独立密钥)")
|
| 39 |
-
if PASSWORD_SALT == _DEFAULT_PASSWORD_SALT:
|
| 40 |
-
print("⚠️ [安全认证] PASSWORD_SALT 未设置环境变量,使用内置默认值")
|
| 41 |
|
| 42 |
# Token 有效期配置(单位:秒)
|
| 43 |
TOKEN_EXPIRE_SECONDS = 7 * 24 * 60 * 60 # 默认7天(向后兼容)
|
|
@@ -345,26 +342,31 @@ def verify_token_with_fallback(token: str) -> Tuple[bool, Optional[str], str]:
|
|
| 345 |
"""
|
| 346 |
兼容验证:同时支持 JWT 和旧版 mock_token
|
| 347 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 348 |
参数:
|
| 349 |
token: Token 字符串(JWT 或 mock_token_xxx)
|
| 350 |
|
| 351 |
返回:
|
| 352 |
(is_valid, account, error_message)
|
| 353 |
-
|
| 354 |
-
注意:
|
| 355 |
-
此函数仅用于过渡期,前端全部更新后应移除
|
| 356 |
"""
|
| 357 |
-
# 先尝试 JWT 验证
|
| 358 |
is_valid, payload, error_msg = verify_token(token)
|
| 359 |
if is_valid:
|
| 360 |
return True, payload.get("sub"), ""
|
| 361 |
|
| 362 |
-
# 降级:检查是否为旧版 mock_token
|
| 363 |
if token.startswith("mock_token_"):
|
| 364 |
account = token.replace("mock_token_", "")
|
| 365 |
print(f"⚠️ 兼容模式:检测到旧版 mock_token,用户 {account}")
|
| 366 |
return True, account, ""
|
| 367 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 368 |
return False, None, error_msg
|
| 369 |
|
| 370 |
|
|
|
|
| 34 |
JWT_SECRET = os.environ.get("JWT_SECRET") or _DEFAULT_JWT_SECRET
|
| 35 |
PASSWORD_SALT = os.environ.get("PASSWORD_SALT") or _DEFAULT_PASSWORD_SALT
|
| 36 |
|
| 37 |
+
# 单实例部署时使用内置默认值即可,无需额外配置环境变量
|
|
|
|
|
|
|
|
|
|
| 38 |
|
| 39 |
# Token 有效期配置(单位:秒)
|
| 40 |
TOKEN_EXPIRE_SECONDS = 7 * 24 * 60 * 60 # 默认7天(向后兼容)
|
|
|
|
| 342 |
"""
|
| 343 |
兼容验证:同时支持 JWT 和旧版 mock_token
|
| 344 |
|
| 345 |
+
验证顺序:
|
| 346 |
+
1. 当前 JWT_SECRET 验证
|
| 347 |
+
2. 旧版 mock_token 格式兼容
|
| 348 |
+
|
| 349 |
参数:
|
| 350 |
token: Token 字符串(JWT 或 mock_token_xxx)
|
| 351 |
|
| 352 |
返回:
|
| 353 |
(is_valid, account, error_message)
|
|
|
|
|
|
|
|
|
|
| 354 |
"""
|
| 355 |
+
# 1. 先尝试 JWT 验证
|
| 356 |
is_valid, payload, error_msg = verify_token(token)
|
| 357 |
if is_valid:
|
| 358 |
return True, payload.get("sub"), ""
|
| 359 |
|
| 360 |
+
# 2. 降级:检查是否为旧版 mock_token
|
| 361 |
if token.startswith("mock_token_"):
|
| 362 |
account = token.replace("mock_token_", "")
|
| 363 |
print(f"⚠️ 兼容模式:检测到旧版 mock_token,用户 {account}")
|
| 364 |
return True, account, ""
|
| 365 |
|
| 366 |
+
# 3. JWT 签名无效/过期时,提示重新登录
|
| 367 |
+
if error_msg == "Token 签名无效":
|
| 368 |
+
return False, None, "Token 已失效,请重新登录"
|
| 369 |
+
|
| 370 |
return False, None, error_msg
|
| 371 |
|
| 372 |
|
测试脚本.py
CHANGED
|
@@ -93,12 +93,13 @@ class TestAuthSecurity(unittest.TestCase):
|
|
| 93 |
|
| 94 |
def test_mock_token_support(self):
|
| 95 |
"""测试:mock_token 兼容(向后兼容)"""
|
| 96 |
-
from 安全认证 import
|
| 97 |
|
| 98 |
# 旧版 mock_token 格式
|
| 99 |
mock_token = "mock_token_testuser_1234567890"
|
| 100 |
-
account =
|
| 101 |
-
self.
|
|
|
|
| 102 |
|
| 103 |
|
| 104 |
# ==========================================
|
|
|
|
| 93 |
|
| 94 |
def test_mock_token_support(self):
|
| 95 |
"""测试:mock_token 兼容(向后兼容)"""
|
| 96 |
+
from 安全认证 import verify_token_with_fallback
|
| 97 |
|
| 98 |
# 旧版 mock_token 格式
|
| 99 |
mock_token = "mock_token_testuser_1234567890"
|
| 100 |
+
is_valid, account, _ = verify_token_with_fallback(mock_token)
|
| 101 |
+
self.assertTrue(is_valid, "mock_token 应通过验证")
|
| 102 |
+
self.assertEqual(account, "testuser_1234567890", "mock_token 应正确解析账号")
|
| 103 |
|
| 104 |
|
| 105 |
# ==========================================
|