要点: 有効なトークンは呼び出し元を示すだけで、すべての操作権限を証明するものではありません。
この記事の用語: 認証:アイデンティティの確認。認可:操作権限の確認。Webhook:外部システムからAPIへ届く通知。
現場の課題
長期API キーは漏えいします。ログイン済み利用者もIDを変えて別資源へアクセスできるかもしれません。Webhookも署名と再送防止がなければ偽造・再実行されます。
トークンはアイデンティティを示すだけです。APIは操作、テナント、オブジェクトごとに認可し、Webhookは署名、送信時刻、再実行防止を確認します。
設計と実装
- すべてのトークンでIssuer、Audience、Algorithm、期限、鍵の状態を確認します。
- サーバー側で操作、テナント、オブジェクトをまとめて認可します。
- Webhookは受信した受信したバイト列を署名検証し、送信時刻と再実行防止も確認します。
実装例
signed = timestamp + '.' + rawBody
expected = HMAC(activeSecret, signed)
reject unless constantTimeEqual(signature, expected)
reject if abs(now - timestamp) > 5 minutes
reject if deliveryId already processed本番導入の進め方
認証情報と認可箇所を棚卸しし、判断ログを先に追加します。APIグループごとに共通ポリシーへ移し、トークン寿命を短くし、緊急ローテーションを訓練してから全面強制します。
まとめ
API セキュリティは権限を継続的に狭め、各操作を検証するプロセスであり、ログイン処理一つではありません。
