fix: 修复 Claude Code 伪装为 Factory CLI 的 403 错误

主要修改:
1. 过滤 anthropic-beta header 中的 Claude Code 特有标识
2. 删除 context_management 字段
3. 过滤所有 Claude Code 特有工具(Skill, EnterPlanMode 等)
4. 过滤所有 MCP 相关工具
5. 过滤 messages 内容中的 Claude Code 特征文本
6. 处理 system 字段中的 cache_control 和字符串替换
7. 添加认证容错机制,token 失效时降级到 client authorization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Claude Code
2025-12-26 15:46:09 +00:00
parent a8928bce32
commit 0b04c300c0
4 changed files with 116 additions and 11 deletions

22
auth.js
View File

@@ -239,26 +239,34 @@ function shouldRefresh() {
export async function initializeAuth() {
try {
const authConfig = loadAuthConfig();
if (authConfig.type === 'factory_key') {
// Using fixed FACTORY_API_KEY, no refresh needed
logInfo('Auth system initialized with fixed API key');
} else if (authConfig.type === 'refresh') {
// Using refresh token mechanism
currentRefreshToken = authConfig.value;
// Always refresh on startup to get fresh token
await refreshApiKey();
logInfo('Auth system initialized with refresh token mechanism');
// Try to refresh on startup to get fresh token
try {
await refreshApiKey();
logInfo('Auth system initialized with refresh token mechanism');
} catch (refreshError) {
logError('Failed to refresh token on startup, falling back to client authorization', refreshError);
authSource = 'client';
logInfo('Auth system fallback to client authorization mode');
}
} else {
// Using client authorization, no setup needed
logInfo('Auth system initialized for client authorization mode');
}
logInfo('Auth system initialized successfully');
} catch (error) {
logError('Failed to initialize auth system', error);
throw error;
// Don't throw error, allow server to start with client authorization
authSource = 'client';
logInfo('Auth system fallback to client authorization mode');
}
}