[Anthropic APIで画像ツールが401無効なBearerトークンエラーを返す] - Image Tool Returns 401 Invalid Bearer Token Error with Anthropic API
画像/ビジョンツールがAnthropic APIにAuthorization: Bearerヘッダーを誤って送信するため、x-api-keyヘッダーを期待する認証が失敗します。
🔍 症状
主なエラー現象
画像分析ツールが、スクリーンショットの処理またはAnthropic API 통한ビジョンツールのリクエスト時に401認証エラーで失敗します:
Error: Invalid bearer token (401)
at AnthropicProvider.analyzeImage (/app/src/providers/anthropic.ts:142:12)
at ImageTool.execute (/app/src/tools/image.ts:67:15)
at processTicksAndTriggerCallbacks (node:internal/process/task_queues:95:5)
Image/vision tool auth error — cannot analyze screenshots for ADB-based browsing
TypeError: Invalid bearer token (401)
ネットワークレベルの確認
実際のHTTPリクエストをキャプチャすると、誤 구성된ヘッダーが明らかになります:
# Incorrect request being sent (current behavior)
$ curl -v -X POST https://api.anthropic.com/v1/messages \
-H "Authorization: Bearer sk-ant-..." \
-H "Content-Type: application/json"
< HTTP/2 401
< content-type: application/json
{"type":"error","error":{"type":"authentication_error","message":"Invalid bearer token"}}
影響を受ける操作
以下の操作で認証失敗が発生します:
- 画像ツール: スクリーンショット分析用の直接
imageツール呼び出し - Cron Jobs: ビジョン 기반 분석을 수행하는 예약 자동화 작업
- Threads Browse: Seeker ADBスクリーンショット分析ワークフロー
- Vision API Calls: 画像コンテンツを含むすべての
messagesエンドポイント呼び出し
バージョン情報
OpenClawバージョン2026.2.6-3で影響が確認されています。問題は、公式API仕様とは異なるヘッダー構築を行うAnthropicプロバイダークライアントの実装に起因しています。
🧠 原因
アーキテクチャ上の問題点
Anthropicプロバイダークライアントは、AnthropicのAPIが必要とするAPIキー認証方式ではなく、OAuthスタイルのBearer認証(Authorization: Bearer <token>)を誤って実装しています。
技術的分析
Anthropicの公式APIは固有の認証メカニズムを使用しています:
| 側面 | 期待値(Anthropic) | 実際の値(バグのある実装) |
|---|---|---|
| ヘッダー名 | x-api-key | Authorization |
| ヘッダー値 | sk-ant-… | Bearer sk-ant-… |
| トークン形式 | 生APIキー | OAuth Bearerトークン |
コードパスの分析
失敗はプロバイダーのリクエスト構築レイヤーで発生します:
// lib/providers/anthropic.ts — Buggy implementation
class AnthropicProvider {
private getHeaders(apiKey: string): Record<string, string> {
return {
// INCORRECT: OAuth-style Bearer token
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
'anthropic-version': '2023-06-01',
'anthropic-dangerous-direct-browser-access': 'true'
};
}
}
発生原因
Anthropicプロバイダーは、OAuth 2.0 Bearerトークン認証(OpenAI、OpenRouter、汎用LLMゲートウェイなど)を使用するプロバイダーからコードを adapta して実装された可能性があります。Anthropicは、生のAPIキーを専用のx-api-keyヘッダーで必要とする点で、このパターンとは異なるています。
失敗シーケンス
- ユーザーが
ANTHROPIC_API_KEY環境変数を設定する - 画像ツールが
analyzeImage()メソッドを呼び出す - プロバイダーが
Authorization: Bearer sk-ant-...でHTTPリクエストを構築する - Anthropic APIが
401 Invalid bearer tokenでリクエストを拒否する - エラーがコールスタックを通じてユーザーに伝播する
🛠️ 解決手順
フェーズ1: 影響を受けるファイルの特定
Anthropicプロバイダーの実装をさがします:
# Standard installation paths
find . -path "*/providers/anthropic*" -name "*.ts" 2>/dev/null
find ~/.openclaw -name "anthropic.ts" 2>/dev/null
# Common Docker container path
docker exec <container-name> find /app -name "anthropic.ts" 2>/dev/null
フェーズ2: ヘッダーの修正の適用
Authorization: Bearerヘッダーをx-api-keyに置き換えます:
修正前(不正解):
// lib/providers/anthropic.ts
private getHeaders(apiKey: string): Record<string, string> {
return {
'Authorization': `Bearer ${apiKey}`, // ❌ WRONG
'Content-Type': 'application/json',
'anthropic-version': '2023-06-01',
'anthropic-dangerous-direct-browser-access': 'true'
};
}
修正後(正解):
// lib/providers/anthropic.ts
private getHeaders(apiKey: string): Record<string, string> {
return {
'x-api-key': apiKey, // ✅ CORRECT
'Content-Type': 'application/json',
'anthropic-version': '2023-06-01',
'anthropic-dangerous-direct-browser-access': 'true'
};
}
フェーズ3: その他のBearer参照の確認
ファイルに追加のBearerトークン使用がないことを確認します:
grep -n "Bearer" lib/providers/anthropic.ts
grep -n "Authorization.*Bearer" lib/providers/anthropic.ts
期待される出力:修正後の一致なし。
フェーズ4: サービスの再起動
# Local installation
pkill -f openclaw
openclaw &
# Docker container
docker restart <container-name>
# Kubernetes
kubectl rollout restart deployment/openclaw -n default
🧪 検証
方法1: 直接APIテスト
認証ヘッダーが正しくフォーマットされていることを確認します:
# Test the Anthropic API directly with x-api-key header
curl -s -X POST "https://api.anthropic.com/v1/messages" \
-H "x-api-key: ${ANTHROPIC_API_KEY}" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 10,
"messages": [{"role": "user", "content": "test"}]
}' | jq .
期待される出力(成功):
{
"id": "msg_...",
"type": "message",
"role": "assistant",
"content": [...]
}
方法2: OpenClawツールテスト
CLIを通じてテスト画像分析を実行します:
# Test image tool with local screenshot
openclaw run --image "/tmp/test-screenshot.png" "Describe this image"
# Expected: Successful analysis without 401 error
方法3: 統合テストスクリプト
検証スクリプトを作成して実行します:
cat > /tmp/verify_anthropic_auth.sh << 'EOF'
#!/bin/bash
set -e
echo "Testing Anthropic API authentication..."
RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "https://api.anthropic.com/v1/messages" \
-H "x-api-key: ${ANTHROPIC_API_KEY}" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-3-5-sonnet-20241022",
"max_tokens": 10,
"messages": [{"role": "user", "content": "ping"}]
}')
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
BODY=$(echo "$RESPONSE" | head -n-1)
if [ "$HTTP_CODE" = "200" ]; then
echo "✅ Authentication successful (HTTP 200)"
exit 0
else
echo "❌ Authentication failed (HTTP $HTTP_CODE)"
echo "Response: $BODY"
exit 1
fi
EOF
chmod +x /tmp/verify_anthropic_auth.sh
/tmp/verify_anthropic_auth.sh
方法4: Cron Jobの検証
自動化タスクの場合、診断ログを追加します:
# Verify cron job logs show successful authentication
journalctl -u openclaw-cron -n 50 | grep -E "(anthropic|vision|image|401)"
# Or check the cron job output directly
cat /var/log/openclaw/cron.log | tail -20
期待されること: ログに401またはInvalid bearer tokenエラーがないこと。
⚠️ よくある落とし穴
落とし穴1: キャッシュされたDockerイメージ
DockerでOpenClawを実行している場合、プロバイダーコードの修正後にイメージをリビルドしてください:
# Incorrect: Container restart won't apply code changes
docker restart openclaw
# Correct: Rebuild and recreate the container
docker build -t openclaw:fixed .
docker stop openclaw && docker rm openclaw
docker run -d --name openclaw openclaw:fixed
落とし穴2: 複数のプロバイダー設定
OpenClawにはプロバイダーのフォールバックが設定されている場合があります。正しいプロバイダーが使用されていることを確認します:
# Check active provider configuration
openclaw config list | grep -A5 anthropic
# Verify environment variable precedence
env | grep -i anthropic
落とし穴3: APIキー形式の不一致
APIキーが正しくフォーマットされていることを確認します(Anthropicキーはsk-ant-で始まります):
# Validate key format
echo $ANTHROPIC_API_KEY | grep -E "^sk-ant-"
# Should output the key; no output means incorrect format
落とし穴4: ベースURLの上書き
一部の設定では、Anthropicの呼び出しがプロキシ(OpenRouter)を通じてリダイレクトされ、異なる認証 ожидаされます:
# If using OpenRouter proxy, Bearer tokens ARE correct
openclaw config get providers.anthropic.baseURL
# Should be empty or https://api.anthropic.com (not openrouter)
落とし穴5: Nodeモジュールのキャッシュ
TypeScriptコンパイルのキャッシュにより、修正が反映されない場合があります:
# Clear build cache
rm -rf node_modules/.cache
rm -rf dist/
# Rebuild
npm run build
# Or for TypeScript watch mode
npm run build:watch &
落とし穴6: ヘッダーのバージョンの不一致
Anthropicは正確なバージョンヘッダーを必要とします。確認してください:
# Correct version header (as of 2024)
anthropic-version: 2023-06-01
# Incorrect versions will cause errors
anthropic-version: 2023-01-01 # ❌ Too old
anthropic-version: latest # ❌ Not accepted
落とし穴7: macOSキーチェーン認証情報の保存
macOSでは、キーチェーンに保存されたAPIキーは環境変数が変わっても更新されない場合があります:
# Remove cached Keychain entry and rely on environment variable
security delete-generic-password -s "OpenClaw" -a "anthropic_api_key"
# Or update the Keychain entry
security add-generic-password -s "OpenClaw" -a "anthropic_api_key" -w "sk-ant-your-key"
🔗 関連するエラー
直接的な関連
401 authentication_error: Invalid bearer token— 主な症状。BearerヘッダーがAnthropicに送信されたときに発生401 authentication_error: Incorrect API key— 類似のエラーだが、ヘッダーではなくキー形式が間違っていることを示す401 authentication_error: No API key provided—x-api-keyヘッダーが完全に欠落している
文脈的な関連
- 画像ツールの失敗 — ビジョン/スクリーンショット分析が失敗した場合の一般的なエラーカテゴリ
- OpenRouterプロキシへの依存 — ユーザーはOpenRouter経由でルーティングすることでこのバグを回避しようとする
- プロバイダーフォールバックのトリガー — フォールバックが設定されている場合、エラーはフォールバックプロバイダーにカスケードする可能性がある
過去の参照
| Issue | Description | Resolution |
|---|---|---|
| GitHub Issue #421 | 初回報告: “Image/vision tool auth error” | 現在の修正が進行中 |
| PR #423 | 環境変数トグルを使用した修正の試み | 複雑性により元に戻された |
Commit a3f9d2c | Bearer認証を導入したAnthropicプロバイダーリファクター | リグレッションの根本コミット |
外部参照
- Anthropic API Authentication Documentation — 正しいヘッダー形式の公式リファレンス
- Anthropic API Reference — すべてのエンドポイントの完全なヘッダー要件