パスワード管理
このドキュメントの目的
ユーザー自身によるパスワード変更・パスワードリセット機能を実装することが目標です。
具体的には、/me/password/change と /me/password/reset APIを使用して、ログイン済みユーザーが自分のパスワードを管理できるフローを構築します。
学べること
✅ パスワード変更
- 現在のパスワードを検証して新しいパスワードに変更
- パスワードポリシーによる検証
- セキュリティイベントとの連携
✅ パスワードリセット
- パスワードを忘れた場合のリセットフロー
password:resetスコープによる認可- 代替認証方式(メール検証等)との組み合わせ
所要時間
⏱️ 約10分
このドキュメントの位置づけ
Phase 1: 最小構成で動作確認(Step 5/5)
前提ドキュメント:
- ユーザー登録 - ユーザー登録済み
次のドキュメント:
前提条件
- how-to-05でユーザー登録完了
- アクセストークン取得済み
- OAuth 2.0 / OIDC の基本的なフロー理解
パスワード管理の2つの方法
idp-serverでは、2つのパスワード管理APIを提供し ています:
方法1: パスワード変更(Password Change)
現在のパスワードを知っている場合
ユーザーが定期的にパスワードを変更したい場合や、セキュリティ強化のためにパスワードを更新する場合に使用します。
ユースケース:
- ✅ 定期的なパスワード更新
- ✅ セキュリティ強化のための変更
- ✅ パスワード漏洩の疑いがある場合の予防的変更
必要な情報:
- 現在のパスワード(
current_password) - 新しいパスワード(
new_password)
方法2: パスワードリセット(Password Reset)
現在のパスワードを忘れた場合
ユーザーがパスワードを忘れてログインできない場合に、代替認証方式(メール検証等)で本人確認後、新しいパスワードを設定します。
ユースケース:
- ✅ パスワード忘れ
- ✅ アカウント復旧
必要な情報:
- 新しいパスワード(
new_password)のみ - ※ 事前に
password:resetスコープで認証済みであること
パスワード変更の実装
フロー概要
[ユーザー] ログイン済み(アクセストークン取得済み)
↓
[ユーザー] パスワード変更リクエスト
↓ POST /me/password/change
↓ current_password + new_password
[idp-server]
↓ 1. 現在のパスワード検証
↓ 2. 新パスワードのポリシー検証
↓ 3. パスワード更新
↓
[レスポンス] 成功 / エラー
API実行
# 接続先サーバーURL
IDP_SERVER_URL=http://localhost:8080
curl -X POST "${IDP_SERVER_URL}/${PUBLIC_TENANT_ID}/v1/me/password/change" \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"current_password": "OldPassword123!",
"new_password": "NewSecurePass456!"
}' | jq .
パラメータ
| 項目 | 型 | 必須 | 説明 |
|---|---|---|---|
current_password | string | ✅ | 現在のパスワード |
new_password | string | ✅ | 新しいパスワード(テナントのパスワードポリシーで検証) |
成功レスポンス
HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Password changed successfully."
}