Skip to content

[Design] 委譲 JWT が jti nonce でシングルユース: SDK の delegated_access 再利用と両立しない #61

Description

@somasekimoto

実機検証で確認した挙動 (PR #58 の 4 ノード mesh 検証)

  • 受信者が委譲 JWT で read → 初回は成功 (member 直・relay 経由とも 200)
  • 同じ JWT での 2 回目の read は 403 — UcanAdapter::verify_auth_token が check_and_record_nonce(jti) で jti を消費するため

矛盾

  • monas-account の /issuer/delegate は TTL (デフォルト 3600 秒) 付きのトークンを発行し、SDK は ShareContentOutput.delegated_access として1 個を受信者に渡す設計
  • しかし state node 側では jti が nonce として一度で消費されるため、この 1 個のトークンでは read が 1 回しかできない
  • 受信者の通常利用 (history 取得 → version data 取得だけで既に 2 リクエスト) が成立しない

論点

  • リプレイ防止は request signature の timestamp freshness (5 分窓) で既に担保されている。jti の nonce 消費は「リクエストのリプレイ」ではなく「トークンの再利用」を禁止しており、これが意図か要確認
  • 意図的なら: SDK/gateway はリクエストごとに /issuer/delegate でトークンを再発行する設計にする必要がある (レイテンシ・可用性への影響大)
  • 意図でないなら: jti nonce は PoP 署名の (timestamp とセットの) リプレイ防止に置き換え、トークンは TTL 内再利用可へ

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions