Go言語でのセキュアなAPIキー生成と管理の実装パターン
Go
セキュリティ
認証
APIキーの生成と管理において実装したセキュリティ対策のパターン。
1. APIキー生成のセキュリティ要件
- crypto/rand を使用してセキュアなランダムバイトを生成
- 32バイトの十分な長さで予測困難性を確保
- Base64 URL-safe エンコーディングで安全な文字列に変換
- プレフィックス(pk_paput_)でサービス識別と偽造防止
2. ハッシュ化による保存
- 平文のAPIキーはDBに保存せず、HMAC-SHA256でハッシュ化
- HMACを使用することで同じ入力に対して同じ出力を保証
- ハッシュから元のキーを復元不可能にすることで漏洩時の被害を最小化
3. 検証とバリデーション
4. 有効期限管理
- デフォルト365日、最大730日の有効期限設定
- 期限切れチェックをミドルウェアで実装
- ローテーション機能で定期的な更新を促進
5. クリーンアーキテクチャでの配置
- インフラ層(infrastructure/auth/apikey)に純粋なユーティリティとして実装
- リポジトリ依存を排除し、ハッシュ化と検証のみを担当
- ビジネスロジック(ユーザー検索等)はユースケース層で実装
6. テスト戦略
- ユニーク性の検証(100回生成して重複なし)
- ハッシュの不可逆性確認
- プレフィックスと長さの境界値テスト