メインコンテンツまでスキップ

ログイン

← 導入ガイドに戻る


パスワード認証によるログイン機能を提供します。

OpenID Connect(OIDC)準拠のセキュアで信頼性の高いログインを実現できます。 Socialログイン(Google等の外部サービス連携)については Socialログイン を参照してください。


概要図

┌─────────────────────────────────┐
│ あなたのアプリ(トップページ) │
│ │
│ ┌─────────────────┐ │
│ │ [ログイン] │ ← クリック │
│ └─────────────────┘ │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ ログイン画面          │
│ │
│ メールアドレス: [__________] │
│ パスワード: [__________] │
│ │
│ ┌─────────────────┐ │
│ │ [ログイン] │ │
│ └─────────────────┘ │
└─────────────────────────────────┘

┌─────────────────────────────────┐
│ あなたのアプリ(ログイン完了) │
│ │
│ ようこそ、○○さん │
└─────────────────────────────────┘

できること

パスワード認証

メールアドレス/ユーザー名 + パスワードによるログインを提供します。

最もシンプルで基本的なログイン方式です。Socialログインとの併用も可能です(詳細は Socialログイン)。

セキュリティ機能

不正アクセスを防ぐ仕組みが標準で組み込まれています。

  • アカウントロック: ログイン失敗回数でアカウントを一時ロック
  • パスワードポリシー: 文字数、複雑さ、有効期限、履歴管理
  • 失敗回数のリセット: 成功時または時間経過でリセット

ユーザー管理

ユーザー登録から削除までを一元管理できます。

  • 新規ユーザー登録: メールアドレス確認、利用規約同意の管理
  • プロフィール管理: ユーザー情報の登録・更新
  • パスワードリセット: セキュアなパスワード再設定フロー
  • アカウント削除: ユーザーによる退会処理

マルチテナント対応

組織ごとに異なるログイン設定を提供できます。

  • テナントAは「パスワードのみ」
  • テナントBは「パスワード + MFA」
  • テナントCは「パスワード + Socialログイン」

このように、同じidp-serverで複数の組織・サービスを運用できます。

セッション管理

ログイン状態の維持と制御ができます。

  • シングルサインオン(SSO): 1回ログインすれば複数アプリで使える
  • セッション有効期限: 一定時間後に自動ログアウト
  • セッション延長: アクティブなユーザーは期限を延長
  • ログアウト: ユーザーによる明示的なログアウト
  • 強制ログアウト: 管理者が特定ユーザーをログアウトさせる

SSO(シングルサインオン)の例:

ユーザーがアプリAでログイン

セッション作成(idp-server)

同じユーザーがアプリBにアクセス

既存セッションを使用(再ログイン不要)

導入時に決めること

1. 認証識別子

選択肢説明向いているケース
メールアドレス + パスワード最も一般的一般消費者向けサービス
ユーザー名 + パスワードメールアドレスを使わない社内システム

idp-serverでの設定:

  • 認証ポリシーで認証方式を定義

2. パスワードの強度をどうするか

決めること選択肢の例
最小文字数8文字以上、12文字以上
必須文字種英数字必須、記号必須

idp-serverでの設定:

  • パスワードポリシーで文字数、複雑さの要件を設定

3. ログイン失敗時の挙動

決めること選択肢の例
アカウントロック条件5回失敗でロック、10回失敗でロック
ロック期間30分、1時間、管理者が解除するまで
失敗回数のリセット成功したらリセット、24時間後にリセット

idp-serverでの設定:

  • 認証ポリシーでロック条件(失敗回数、期間)を設定
  • リセット条件を設定

4. ユーザー登録時に何を入力させるか

決めること選択肢の例
必須項目メールアドレスのみ、氏名も必須、電話番号も必須
メール確認する、しない
利用規約への同意必須、任意

idp-serverでの設定:

  • ユーザースキーマで必須項目を定義
  • メール確認フローの有効化/無効化
  • 同意管理の設定

5. セッション管理

5-1. セッション有効期限

決めること選択肢の例
有効期限30分、1時間、24時間、無期限
アイドルタイムアウト15分、30分、なし
セッション延長アクティブ時に自動延長、延長しない

idp-serverでの設定:

  • デフォルトのセッション有効期限(default_max_age)
  • クライアント別のmax_age設定

5-2. SSO(シングルサインオン)の範囲

選択肢説明
同一テナント内同じテナントの複数アプリでSSO
セッション共有しないアプリごとに個別ログイン

idp-serverでの設定:

  • テナント設定でSSOの有効化
  • セッション共有ポリシー

まとめ

ログイン機能を導入する際の重要なポイント:

必ず決めること

  1. 認証識別子: メールアドレス or ユーザー名
  2. セキュリティレベル: パスワード強度、ロック条件、失敗時の挙動
  3. ユーザー登録フロー: 必須項目、メール確認、同意管理
  4. セッション管理: 有効期限、アイドルタイムアウト、SSOの範囲

idp-serverが提供すること

  • OAuth 2.0/OpenID Connect標準準拠のログイン機能
  • パスワードポリシー(文字数、複雑さ、有効期限、履歴管理)
  • アカウントロック機能(失敗回数、ロック期間、リセット条件)
  • セッション管理(SSO、有効期限、アイドルタイムアウト、強制ログアウト)
  • マルチテナント対応(組織ごとの設定分離)

自分で実装すること

  • ログイン画面(UI)
  • ユーザー登録画面(UI)
  • パスワードリセット画面(UI)

ログイン画面の構築方法: idp-serverの view-data APIGET /{tenant-id}/v1/authorizations/{id}/view-data)を呼び出すことで、クライアント名・ロゴ・スコープ一覧等の画面描画に必要な情報を取得できます。さらに、クライアントにカスタムプロパティを設定しておくと、アプリ固有のUI設定やフィーチャーフラグも client_custom_properties として受け取れます。

セキュリティの注意点

  • パスワードポリシーは厳しすぎず、ユーザー体験とのバランスを取る
  • アカウントロックは攻撃者によるDoS攻撃にも使われる可能性があるので注意

パスワード変更・リセット

idp-serverはパスワード変更とリセットの2つのAPIを提供しています。

パスワード変更(ユーザー自身)

認証済みユーザーが現在のパスワードを使って新しいパスワードに変更します。

POST /{tenant-id}/v1/me/password/change
Authorization: Bearer {access_token}

{
"current_password": "現在のパスワード",
"new_password": "新しいパスワード"
}

パスワードリセット(管理者による)

MFA設定がないテナントでは、管理者がManagement APIを使ってユーザーのパスワードをリセットできます。

PUT /v1/management/organizations/{org-id}/tenants/{tenant-id}/users/{user-id}/password
Authorization: Bearer {admin_access_token}

{
"raw_password": "新しいパスワード"
}

パスワードリセット(メール認証による)

MFA設定があるテナントでは、password:reset スコープを使ったセルフサービスリセットが可能です。詳細は MFA - パスワードリセット を参照してください。

  1. scope=openid password:reset で認可リクエスト
  2. メール認証でユーザーを本人確認
  3. password:reset スコープ付きトークンを取得
  4. POST /{tenant-id}/v1/me/password/reset で新パスワードを設定

テンプレートで試す

ローカル環境ですぐに試せるテンプレートが用意されています。

cd config/templates/use-cases/login-password-only
./setup.sh

セットアップ後の動作確認は VERIFY.md を参照してください。

詳細: config/templates/use-cases/login-password-only/

関連ドキュメント


最終更新: 2026-03-13