Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

AgentPass

Replay-safe authentication middleware for autonomous AI agents.

Ed25519 署名済み JWT を使い、AIエージェント間(M2M)の認証をサードパーティサーバー不要で実現します。

Agent  ──[AgentPass JWT]──▶  Merchant API
              ▲ Ed25519 署名 + aud 固定 + jti 使い捨て

What AgentPass Solves

問題 AgentPass の対策
リプレイ攻撃 jti クレームで各トークンを使い捨て。傍受されたトークンを再送しても即拒否
なりすまし Ed25519 署名でトークンを発行元エージェントの鍵ペアに紐付け。偽造不可
APIキー共有 エージェントごとに独立した鍵ペア。1つの鍵が漏洩しても他に影響なし

3-Minute Quick Demo

pip install agentpass-ai cryptography PyJWT

Note: Install package: agentpass-ai / Import package: agentpass

# quickdemo.py — python quickdemo.py
from agentpass import issue_token, verify_token, TokenRequest, generate_keypair

ENDPOINT = "https://api.example.com/v1/query"

# エージェントと検証側が同じ鍵ペアを共有するデモ。
# 本番: エージェントが事前に公開鍵を加盟店へ登録する。
private_key, public_key = generate_keypair()

token = issue_token(
    TokenRequest(
        agent_id="agent-demo-001",
        destination_url=ENDPOINT,
        amount_requested=0.001,
        purpose="data query",
    ),
    private_key,
).token

claims = verify_token(token, public_key, ENDPOINT)
print(f"✓ Verified  agent={claims.agent_id}  amount={claims.amount} {claims.currency}")
print(f"  token={token[:52]}...")

Expected output:

✓ Verified  agent=agent-demo-001  amount=0.001 JPY
  token=eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJzdWIi...

ASGI Middleware Setup

FastAPI / Starlette への組み込みは3ファイルで完了します。

1. インストール

pip install agentpass-ai fastapi uvicorn cryptography PyJWT httpx

Note: Install package: agentpass-ai / Import package: agentpass

2. 加盟店サーバー (merchant.py)

from fastapi import FastAPI
from starlette.requests import Request
from agentpass import AuthorizationMiddleware, AnomalyDetector

app = FastAPI()
app.add_middleware(
    AuthorizationMiddleware,
    anomaly_detector=AnomalyDetector(),  # リプレイ攻撃検知
)

@app.get("/v1/pay")
async def pay(request: Request):
    claims = request.state.agent_claims   # 検証済みクレームが自動バインド
    return {
        "agent_id": claims.agent_id,
        "amount": claims.amount,
        "currency": claims.currency,
    }

3. agentpass.json を公開する

{
  "agentpass_version": "1.0.0",
  "merchant_id": "550e8400-e29b-41d4-a716-446655440000",
  "public_key": "a1b2c3d4...",
  "pricing": [
    { "endpoint": "/v1/pay", "price_per_token": 0.001 }
  ]
}

https://api.merchant.com/.well-known/agentpass.json で配信します。public_key はエージェントが事前登録した Ed25519 公開鍵(hex)を設定してください。

4. エージェント (agent.py)

from agentpass import issue_token, TokenRequest, generate_keypair
import httpx

# 実際はセキュアストレージから秘密鍵を読み込む
private_key, _ = generate_keypair()

req = TokenRequest(
    agent_id="agent-7f3a...",
    destination_url="https://api.merchant.com/v1/pay",
    amount_requested=0.001,
    purpose="data access",
)
issued = issue_token(req, private_key)

resp = httpx.get(
    "https://api.merchant.com/v1/pay",
    headers={"Authorization": f"AgentPass {issued.token}"},
)
print(resp.json())  # {"agent_id": "agent-7f3a...", "amount": 0.001, "currency": "JPY"}

5. 起動

# Terminal 1
uvicorn merchant:app

# Terminal 2
python agent.py

Security Model

防衛壁 仕組み 防御する攻撃
Ed25519 署名 トークンをエージェントの秘密鍵で署名。公開鍵は agentpass.json から自律取得 偽造・なりすまし
改ざん検知 JWT 三部構造。1バイトでも変更すれば検証失敗 中間者改ざん
aud 宛先固定 完全URLを埋め込み、受信URLと完全一致チェック トークン横流し
jti 使い捨て AnomalyDetector が JTI を TTL 付きで記録し、再送を即拒否 リプレイ攻撃

クローラーは SSRF防御(プライベートIPへの解決を即拒否)と 1MBストリーム制限(巨大レスポンスで即切断)を内蔵しています。


Architecture

┌─────────────────────────────────────────────────────┐
│                  AgentPass Core                      │
│                                                      │
│  AuthorizationMiddleware (ASGI)                      │
│    │                                                 │
│    ├─▶ AgentPassCrawler          ├─▶ TTL Cache       │
│    │     └─▶ SSRF Protection     └─▶ 1MB Limit       │
│    │                                                  │
│    ├─▶ TokenVerifier (Ed25519 + aud + exp)           │
│    │                                                  │
│    └─▶ AnomalyDetector (jti replay defense)          │
│                                                      │
└─────────────────────────────────────────────────────┘
モジュール 役割
AgentPassCrawler agentpass.json の非同期取得・SSRF防御・TTLキャッシュ
TokenVerifier Ed25519署名検証・aud/expチェック・必須クレーム検証
AnomalyDetector JTIベースのリプレイ攻撃検知・期限切れエントリのGC
AuthorizationMiddleware 上記3つを統合するASGIミドルウェア

Error Reference

HTTP error_code 原因
400 INVALID_PAYLOAD 署名不一致 / 必須クレーム欠如
401 INVALID_PAYLOAD Authorizationヘッダー欠如 / スキーム誤り / JWT不正
401 TOKEN_EXPIRED JWTの exp 超過
403 DESTINATION_MISMATCH aud が要求URLと不一致
403 REPLAY_ATTACK 同一JTIのトークンを再送信
503 MERCHANT_UNVERIFIED agentpass.json の取得失敗

Tests

pytest
pytest --cov=src --cov-report=term-missing  # カバレッジ付き

263 tests, 0 failed(Python 3.14)

Core(153件)

ファイル カバー範囲 件数
tests/test_agentpass_crawler.py SSRF防御・1MB制限・TTLキャッシュ・HTTP異常系 20
tests/test_authorization_middleware.py ミドルウェア全経路(正常・異常・JWT検証) 20
tests/test_core_authorization_middleware.py Pydanticスキーマ統合・エラーコード体系 18
tests/test_circuit_breaker.py 予算・レート制限・スライディングウィンドウ 22
tests/test_token_verifier.py Ed25519署名・aud・exp・クレーム検証 15
tests/test_token_issuer.py トークン発行・JTI一意性 9
tests/test_anomaly_detector.py リプレイ検知・GC・時刻制御 11
tests/test_credit_scorer.py 信用スコア計算・ペナルティ・境界値 22
tests/test_agent_signer.py AgentID導出・決定論性 9
tests/e2e/test_agentpass_ecosystem.py フルスタック統合(正常系・リプレイ攻撃) 7

Sandbox(110件)— プロトコル境界検証

ファイル カバー範囲 件数
tests/sandbox/test_budget_exceeded_returns_402.py Budget Control・HTTP 402拒否 20
tests/sandbox/test_budget_rejection_audit_log.py append-only JSONL監査ログ 16
tests/sandbox/test_budget_replay.py 拒否イベントのreplay検証 8
tests/sandbox/test_exp005b_jti_collision.py JTI衝突・スレッド安全性(N並列→承認1件) 16
tests/sandbox/test_exp006_burst_freeze.py バースト検知・一時freeze(HTTP 503) 22
tests/sandbox/test_exp005c_agent_keypair_isolation.py エージェント別鍵隔離・signer mismatch拒否 28

License

MIT License — 商用利用・改変・再配布自由。

Release files for agentpass-ai 1.0.0b3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agentpass-ai 1.0.0b3
File Size Uploaded
agentpass_ai-1.0.0b3.tar.gz 31.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agentpass-ai 1.0.0b3
File Interpreter ABI Platform
agentpass_ai-1.0.0b3-py3-none-any.whl Python 3 none any Details

Total release size: 53.3 kB

Release files / agentpass_ai-1.0.0b3.tar.gz

Download URL agentpass_ai-1.0.0b3.tar.gz
Size 31.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3bd4cc5a798d63d2003f0ba76aadd893b753bf6fa9ff0dcb6667d088d99d7f40
BLAKE2b-256 checksum
How to use checksums
c7945954760f53a60446cb75da39009a5c9a657257dc89ff9027e1a1e50312df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release files / agentpass_ai-1.0.0b3-py3-none-any.whl

Download URL agentpass_ai-1.0.0b3-py3-none-any.whl
Size 21.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8fe6050eb18889326e253eee2c9cde0bd88706a5ee05f031c9d1abc98d5084e7
BLAKE2b-256 checksum
How to use checksums
1449dfbfb94451a7f2cc945db6d622eef789ef4d8287b0959ac03c16fc37c597
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

1.0.0b3 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page