API トークンを安全に保存する方法は「システム全体のセキュリティを左右する最重要ポイント」です
読者のみなさんが業務システムや Web API を開発する際、 API トークンを安全に保存する方法を理解することは必須のセキュリティ要件です。
API トークンは「認証情報そのもの」であり、 漏洩すると パスワード漏洩と同じレベルの重大事故になります。
ここでは、初心者でも理解できるように ステップバイステップで思考しながら、 実務で使える C# の API トークン安全保存ユーティリティを丁寧に解説します。
API トークンを安全に保存する目的
なぜ保存方法が重要なのか
API トークンは次のような攻撃に狙われます。
- データベース漏洩
- ログ漏洩
- Cookie 盗難
- XSS によるトークン奪取
- サーバー側の設定ミス
API トークンが漏洩すると、攻撃者は次のことができます。
- 正規ユーザーとして API にアクセス
- データの読み取り・書き込み
- 権限昇格
- システム破壊
そのため、API トークンは パスワードと同じレベルで厳重に扱う必要があります。
API トークン保存の基本原則(重要)
1. 平文で保存してはいけない
データベースにそのまま保存すると、漏洩時に即アウトです。
2. ハッシュ化して保存する
パスワードと同じように扱います。
3. ハッシュは「高速ハッシュ」ではなく「安全なハッシュ」を使う
SHA256 は高速すぎるため、総当たり攻撃に弱いです。
推奨:
- PBKDF2
- bcrypt
- Argon2(最強)
4. トークンは短命にする
有効期限を短くすることで、漏洩時の被害を最小化できます。
API トークン保存の正しい流れ(ステップバイステップ)
Step 1:API トークンを生成する
暗号学的乱数で生成します。
Step 2:API トークンをハッシュ化する
高速ハッシュではなく、PBKDF2 / bcrypt / Argon2 を使います。
Step 3:ハッシュ値をデータベースに保存する
平文は絶対に保存しません。
Step 4:クライアントには平文トークンを返す
クライアント側が保存します。
Step 5:API 呼び出し時にハッシュを比較する
受け取ったトークンをハッシュ化し、DB のハッシュと比較します。
