fix(test): 修复JWT篡改签名测试flaky - 改签名中间字符而非最后一位 #770
@@ -458,8 +458,15 @@ class TestJWTService:
|
||||
def test_verify_token_tampered_signature(self, service):
|
||||
"""篡改签名的token无法验证"""
|
||||
token = service.create_access_token(user_id="user_123")
|
||||
# 篡改最后一个字符
|
||||
tampered = token[:-1] + ("A" if token[-1] != "A" else "B")
|
||||
# 篡改签名部分中间的字符(JWT格式: header.payload.signature)
|
||||
# 改最后一个字符不可靠(可能是padding),改签名中间确保验证失败
|
||||
parts = token.rsplit(".", 1)
|
||||
assert len(parts) == 2, "JWT格式不对,应该有两个点分隔三部分"
|
||||
signature = parts[1]
|
||||
# 篡改签名中间的几个字符
|
||||
mid = len(signature) // 2
|
||||
tampered_sig = signature[:mid] + ("X" if signature[mid] != "X" else "Y") + signature[mid + 1 :]
|
||||
tampered = parts[0] + "." + tampered_sig
|
||||
with pytest.raises(InvalidTokenError):
|
||||
service.verify_token(tampered)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user