Compare commits

...

1 Commits

Author SHA1 Message Date
CI Bot 1ab440d60f fix(test): 修复test_verify_token_tampered_signature偶发失败
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 19s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 30s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 33s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 43s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 46s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 1m41s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m24s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m26s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m29s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 3m3s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m42s
AI Code Review / AI Code Review (pull_request) Successful in 5m0s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m56s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 10m11s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 32s
原测试仅篡改token最后一个字符,在某些PyJWT/环境下可能因
base64填充位或签名末尾字节对齐问题导致验证仍通过。
改为篡改payload内容(修改sub字段),确保签名必然不匹配。
2026-07-22 20:58:49 +08:00
+18 -3
View File
@@ -456,10 +456,25 @@ class TestJWTService:
service.verify_token(token)
def test_verify_token_tampered_signature(self, service):
"""篡改签名的token无法验证"""
"""篡改payload的token无法验证(签名不匹配)"""
import base64
import json
token = service.create_access_token(user_id="user_123")
# 篡改最后一个字符
tampered = token[:-1] + ("A" if token[-1] != "A" else "B")
parts = token.split(".")
assert len(parts) == 3
# 篡改 payload 部分(改用户ID),会导致签名不匹配
payload_b64 = parts[1]
# 补 padding 以便解码
padding = 4 - len(payload_b64) % 4
if padding != 4:
payload_b64 += "=" * padding
payload_bytes = base64.urlsafe_b64decode(payload_b64)
payload = json.loads(payload_bytes)
payload["sub"] = "hacked_user"
new_payload_bytes = json.dumps(payload).encode()
new_payload_b64 = base64.urlsafe_b64encode(new_payload_bytes).rstrip(b"=").decode()
tampered = f"{parts[0]}.{new_payload_b64}.{parts[2]}"
with pytest.raises(InvalidTokenError):
service.verify_token(tampered)