パスワードポリシー
Logto では、パスワードの作成や更新方法によってパスワードポリシーの適用方法が異なります:
- 標準のサインイン体験、体験 API、アカウント API などのエンドユーザーフローでは、常に現在の パスワードポリシー が適用されます。
- 管理者による Management API
patch /api/users/{userId}/password経由の操作は例外であり、必要に応じてポリシーチェックなしで資格情報のプロビジョニングやリセットが可能です。 - 既存のパスワードが現在のルールに準拠しているか監査するには、
POST /api/sign-in-exp/default/check-passwordを呼び出し、返されたバリデーション結果に基づいて対応します。詳細は パスワード準拠チェック をご覧ください。
パスワードポリシーの設定
新規ユーザーやパスワードを更新するユーザーに対して、パスワードの強度要件を強制するパスワードポリシーを設定できます。コンソール > セキュリティ > パスワードポリシー でパスワードポリシーの設定を行ってください。
- 最小パスワード長:パスワードに必要な最小文字数を設定します。(NIST は少なくとも 8 文字 を推奨)
- 必要な文字種の最小数:パスワードに必要な文字種の最小数を設定します。利用可能な文字種は以下の通りです:
- 大文字:
(A-Z) - 小文字:
(a-z) - 数字:
(0-9) - 記号:
(!"#$%&'()\*+,-./:;<>=?@[]^\_`|{}~ )
- 大文字:
- 漏洩履歴チェック:この設定を有効にすると、過去にデータ漏洩で公開されたパスワードを拒否します。(Have I Been Pwned により提供)
- 繰り返しチェック:この設定を有効にすると、同じ文字が繰り返されるパスワードを拒否します。(例:"11111111" や "password123")
- ユーザー情報チェック:この設定を有効にすると、ユーザー名、メールアドレス、電話番号などのユーザー情報を含むパスワードを拒否します。
- カスタムワード:パスワードに含めたくないカスタムワード(大文字小文字を区別しない)のリストを指定できます。
パスワード有効期限
パスワード有効期限を設定すると、一定日数ごとにユーザーにパスワードのリセットを求めることができます。また、特定のユーザーのパスワードを手動で期限切れにすることも可能です(例:漏洩が判明した場合など)。
このポリシーは、ユーザーがパスワードサインインで正しいパスワードを入力した後にのみチェックされます。認証コード、ソーシャルサインイン、SSO、パスキーでサインインするユーザーには影響しません。
パスワード有効期限の有効化
コンソール > セキュリティ > パスワードポリシー で パスワード有効期限 カードを見つけてください:
- パスワード有効期限を有効にする をオンにします。
- パスワード有効期間(日数) を 1 ~ 9999 日の間で設定します。
- 変更を保存します。
このトグルは、サインイン体験に パスワード再設定 方法(メールまたは電話)と有効なコネクターが少なくとも 1 つある場合にのみ有効になります。ユーザーはこのフローでのみ期限切れパスワードをリセットできるためです。同じ理由で、ポリシー有効時はパスワード再設定をサポートする最後のメールまたは SMS コネクターを削除できません。サインアップ時にメールアドレスや電話番号を必須にしていない場合、一部のユーザーはリセットコードを受け取れない可能性があるため、サインアップ時に収集することを検討してください。
Logto は、ユーザーのパスワードが最後に設定または変更された日時を記録します。そのパスワードが有効期間と同じだけ古くなると、次回のパスワードサインイン時にリセットを求められます。パスワード変更日時が記録されていないユーザーは、ポリシー有効化時点から計測されるため、有効化しても全員のパスワードが一斉に期限切れになることはありません。ポリシーをオフにして再度オンにすると、この開始時刻がリセットされます。
ユーザーが新しいパスワードを設定するとき(パスワード再設定、アカウント API、または Management API 経由)、パスワードの有効期間はリセットされ、手動の期限切れも解除されます。
ユーザーのパスワードを手動で期限切れにする
パスワード有効期限ポリシーが有効な場合、特定のユーザーに次回サインイン時にパスワードリセットを強制できます:
-
コンソール:コンソール > ユーザー管理 でユーザー詳細ページを開き、パスワード横の 期限切れ をクリックして操作を確認します。このボタンはユーザーがパスワードを持っている場合のみ表示されます。
-
Management API:次のボディで
PATCH /api/users/{userId}/password/expirationを呼び出します:{"isExpired": true}
ポリシーが有効でない場合、API は 400 とエラーコード sign_in_experiences.password_expiration_not_enabled を返し、コンソールの 期限切れ ボタンも無効になります。
よくあるケースは、パスワードが漏洩したことが判明した場合です。期限切れにすることで、ユーザーは新しいパスワードを設定して再度サインインする前に、認証コードでメールアドレスや電話番号の所有を証明する必要があります。すべてのユーザーに定期的なパスワード変更を強制せず、手動でのみ期限切れにしたい場合は、有効期間を 3650 日など長めに設定してポリシーを有効にしてください。
パスワードを期限切れにしても、既存のセッションからユーザーがサインアウトされることはありません。即時にアクセスを遮断したい場合は、ユーザーのアクティブセッション や 認可済みサードパーティアプリ も取り消してください。
エンドユーザーの画面イメージ
ユーザーが期限切れパスワードでサインインすると、正しいパスワード入力後に「パスワードの有効期限が切れています。サインインするにはリセットが必要です。」というメッセージのモーダルが表示されます。パスワードをリセット をクリックすると、識別子が入力済みのパスワード再設定フローに遷移します。メールや電話に送信されたコードで認証し新しいパスワードを設定すれば、再度サインインできます。
体験 API で独自のサインイン UI を構築している場合、パスワード検証リクエストはエラーコード password.expired(HTTP 422)で失敗します。このエラーを検知したら、ユーザーをパスワードリセットフローに誘導してください。
パスワード準拠チェック
Logto でパスワードポリシーを更新した後も、既存ユーザーは現在のパスワードでサインインできます。新規作成アカウントのみが更新後のポリシーに従う必要があります。
より強力なセキュリティを強制するには、POST /api/sign-in-exp/default/check-password API を利用して、ユーザーのパスワードがデフォルトのサインイン体験で定義された現在のポリシーに準拠しているか確認できます。準拠していない場合は、アカウント API を使ったカスタムフローでパスワード更新を促してください。