トークンセキュリティ
OAuth 2.0 / OIDC におけるトークンのセキュリティに関するベストプラクティスをまとめます。
第1部: トークンの種類と特性
トークンの分類
| トークン | 用途 | 有効期限 | 保存場所 |
|---|---|---|---|
| アクセストークン | リソースアクセス | 短い(数分〜数時間) | メモリ |
| リフレッシュトークン | トークン更新 | 長い(数日〜数ヶ月) | 安全なストレージ |
| ID トークン | 認証結果 | 短い(数分〜1時間) | メモリ |
| 認可コード | トークン取得 | 非常に短い(数分) | メモリ |
トークンの形式
参照トークン(Opaque Token):
- ランダムな文字列
- 認可サーバーで検証が必要
- 例: "eyJ0eXAiOiJKV1QiLC..."(実際はランダム)
自己完結型トークン(JWT):
- クレームを含む
- リソースサーバーで直接検証可能
- 例: ヘッダー.ペイロード.署名
{
"iss": "https://auth.example.com",
"sub": "user-123",
"aud": "api.example.com",
"exp": 1704153600,
"scope": "read write"
}
第2部: アクセストークンのセキュリティ
有効期限の設定
推奨される有効期限:
一般的な Web アプリ:
アクセストークン: 1時間
リフレッシュトークン: 7日〜30日
高セキュリティ環境(金融など):
アクセストークン: 5分〜15分
リフレッシュトークン: 1日
M2M(サーバー間通信):
アクセストークン: 1時間
リフレッシュトークン: なし(client_credentials)