9.10. First Login Flow
ユーザーがアイデンティティー仲介を使用してログインすると、Red Hat build of Keycloak はレルムのローカルデータベース内のユーザーの要素をインポートし、リンクします。Red Hat build of Keycloak が外部アイデンティティープロバイダーを介してユーザーを正常に認証すると、以下の 2 つの状況が発生する可能性があります。
- Red Hat build of Keycloak は、すでにユーザーアカウントをインポートし、認証されたアイデンティティープロバイダーアカウントにリンクしている。この場合、Red Hat build of Keycloak は既存のユーザーとして認証を行い、アプリケーションにリダイレクトします。
- Red Hat build of Keycloak に、このユーザーのアカウントが存在しない。通常、新しいアカウントを登録して Red Hat build of Keycloak データベースにインポートしますが、同じメールアドレスを持つ既存の Red Hat build of Keycloak アカウントが存在する場合があります。既存のローカルアカウントを外部アイデンティティープロバイダーに自動的にリンクすることは、セキュリティーホールとなる可能性があります。外部アイデンティティープロバイダーから取得する情報を常に信頼することはできません。
このような状況に対処する場合、組織ごとに異なる要件があります。Red Hat build of Keycloak では、IDP 設定の First Login Flow
オプションを使用して、外部 IDP から初めてログインするユーザーの ワークフロー を選択できます。デフォルトでは、First Login Flow
オプションは first broker login
フローをポイントしますが、独自のフローを使用することや、アイデンティティープロバイダーごとに異なるフローを使用することができます。
フローは管理コンソールの Authentication タブにあります。First Broker Login
フローを選択すると、デフォルトで使用されるオーセンティケーターが表示されます。既存のフローを再設定できます。たとえば、一部のオーセンティケーターを無効にすることや、一部を required
と識別することや、一部のオーセンティケーターを設定することができます。
9.10.1. デフォルトの first login flow のオーセンティケーター
- プロファイルの確認
- このオーセンティケーターはプロファイル情報ページを表示するため、ユーザーは Red Hat build of Keycloak がアイデンティティープロバイダーから取得するプロファイルを確認できます。
-
Actions メニューで
Update Profile On First Login
オプションを設定できます。 - ON の場合、ユーザーにはプロファイルページが表示され、ユーザーのアイデンティティーのフェデレーションを行うために追加情報が要求されます。
- missing 場合、アイデンティティープロバイダーがメール、名、姓などの必須情報を提供しない場合、ユーザーにはプロファイルページが表示されます。
-
OFF の場合、ユーザーが後で
Confirm Link Existing Account
オーセンティケーターによって表示されるページのReview profile info
リンクをクリックしない限り、プロファイルページは表示されません。
- Create User If Unique
このオーセンティケーターは、アイデンティティープロバイダーからのアカウントと同じメールまたはユーザー名を持つ既存の Red Hat build of Keycloak アカウントがすでにあるかどうかを確認します。ない場合、オーセンティケーターは新しいローカルの Red Hat build of Keycloak アカウントを作成し、それをアイデンティティープロバイダーとリンクし、フロー全体を終了します。それ以外の場合は、次の
Handle Existing Account
サブフローが処理されます。重複アカウントがないことを確認する場合は、このオーセンティケーターをREQUIRED
とマークできます。この場合、既存の Red Hat build of Keycloak アカウントが存在すれば、ユーザーにはエラーページが表示され、ユーザーはアカウント管理を通じてアイデンティティプロバイダーアカウントをリンクする必要があります。- このオーセンティケーターは、アイデンティティープロバイダーのアカウントと同じメールまたはユーザー名を持つ Red Hat build of Keycloak アカウントがすでに存在するか確認します。
- アカウントが存在しない場合、オーセンティケーターはローカルの Red Hat build of Keycloak アカウントを作成し、このアカウントをアイデンティティープロバイダーとリンクさせ、フローを終了します。
-
アカウントが存在する場合、オーセンティケーターは次の
Handle Existing Account
サブフローを実装します。 -
重複アカウントがないようにするには、このオーセンティケーターを
REQUIRED
とマークします。Red Hat build of Keycloak アカウントが存在する場合、ユーザーにはエラーページが表示され、ユーザーはアカウント管理を通じてアイデンティティープロバイダーアカウントをリンクする必要があります。
- 既存のアカウントのリンクの確認
-
情報ページで、ユーザーには同じメールアドレスを持つ Red Hat build of Keycloak アカウントが表示されます。ユーザーはプロファイルを再度確認し、別の電子メールまたはユーザー名を使用できます。フローが再起動され、
Review Profile
オーセンティケーターに戻ります。 - あるいは、ユーザーはアイデンティティープロバイダーアカウントを既存の Keycloak アカウントにリンクすることを確認できます。
- ユーザーにこの確認ページを表示させず、直接メール検証または再認証によりアイデンティティープロバイダーのアカウントをリンクさせるには、このオーセンティケーターを無効にします。
-
情報ページで、ユーザーには同じメールアドレスを持つ Red Hat build of Keycloak アカウントが表示されます。ユーザーはプロファイルを再度確認し、別の電子メールまたはユーザー名を使用できます。フローが再起動され、
- 既存のアカウントをメールで検証
-
このオーセンティケーターは、デフォルトで
ALTERNATIVE
です。Red Hat build of Keycloak は、レルムに SMTP が設定されている場合にこのオーセンティケーターを使用します。 - オーセンティケーターはユーザーにメールを送信し、アイデンティティープロバイダーを Red Hat build of Keycloak アカウントにリンクすることを確認します。
- メールによるリンクを確認せず、ユーザーをそのパスワード で再認証する方が望ましい場合には、このオーセンティケーターを無効にします。
-
このオーセンティケーターは、デフォルトで
- 再認証による既存のアカウントの確認
- メールオーセンティケーターが利用できない場合には、このオーセンティケーターを使用します。たとえば、レルムに SMTP を設定していない場合。このオーセンティケーターは、Red Hat build of Keycloak アカウントをアイデンティティープロバイダーにリンクすることを認証するログイン画面をユーザーに表示します。
- ユーザーは、すでに Red Hat build of Keycloak アカウントにリンクされている別のアイデンティティープロバイダーで再認証することもできます。
- ユーザーに OTP の使用を強制することができます。それ以外の場合は、任意で、ユーザーアカウントに OTP を設定した場合に使用されます。
9.10.2. 既存の first login flow の自動リンク
AutoLink オーセンティケーターは、ユーザーが任意のユーザー名またはメールアドレスを使用して自己登録できる一般の環境では危険です。慎重にユーザー登録を管理し、ユーザー名とメールアドレスを割り当てない限り、このオーセンティケーターは使用しないでください。
プロンプトなしでユーザーを自動的にリンクする first login flow を設定するには、以下の 2 つのオーセンティケーターで新しいフローを作成します。
- Create User If Unique
- この認証システムにより、Red Hat build of Keycloak は一意のユーザーを処理できるようになります。オーセンティケーターの要件を Alternative に設定します。
- Automatically Set Existing User
- このオーセンティケーターは、検証なしで既存のユーザーを認証コンテキストに設定します。オーセンティケーター要件を Alternative に設定します。
利用できる中ではこの設定が最も単純ですが、他のオーセンティケーターを使用することができます。たとえば、* エンドユーザーがプロファイル情報を確認する場合は、レビュープロファイルオーセンティケーターをフローの開始に追加できます。* このフローに認証メカニズムを追加し、ユーザーがクレデンシャルを検証するように強制することができます。認証メカニズムを追加するには、複雑なフローが必要です。たとえば、Alternative サブフローで Automatically Set Existing User および Password Form を Required として設定できます。
9.10.3. 自動ユーザー作成の無効化
デフォルトの初回ログインフローでは、外部アイデンティティーに一致する Red Hat build of Keycloak アカウントを検索し、リンクを提案します。一致する Red Hat build of Keycloak アカウントが存在しない場合、フローによって自動的に作成されます。
このデフォルトの動作は、一部のセットアップでは適切ではない可能性があります。1 つの例は、すべてのユーザーが事前に作成されている、読み取り専用の LDAP ユーザーストアを使用する場合です。この場合は、自動ユーザー作成をオフにする必要があります。
ユーザーの作成を無効にするには、以下を実行します。
手順
- メニューで Authentication をクリックします。
- リストから First Broker Login を選択します。
- Create User if Unique を DISABLED に設定します。
- Confirm Link Existing Account を DISABLED に設定します。
これを設定すると、Red Hat build of Keycloak 自体では、どの内部アカウントが外部アイデンティティーに対応するか判断できません。そのため、Verify Existing Account By Re-authentication
オーセンティケーターにより、ユーザー名およびパスワードが提供されます。
ID プロバイダーによるユーザー作成の有効化または無効化は、レルムの User Registration switch とは完全に独立しています。ID プロバイダーによるユーザーの作成を有効にし、同時にレルムのログイン設定でユーザーの自己登録を無効にすることも、その逆を行うこともできます。
9.10.4. 既存ユーザーの最初のログインフローの検出
以下の条件で、最初のログインフローを設定するには、
- このレルムにすでに登録されているユーザーのみがログインできる。
- ユーザーはプロンプトなしで自動的にリンクされる。
以下の 2 つのオーセンティケーターで新しいフローを作成します。
- Detect Existing Broker User
-
このオーセンティケーターは、一意のユーザーが処理されるようにします。オーセンティケーターの要件を
REQUIRED
に設定します。 - Automatically Set Existing User
-
検証なしで既存のユーザーを認証コンテキストに自動的に設定します。オーセンティケーターの要件を
REQUIRED
に設定します。
アイデンティティープロバイダー設定の First Login Flow
をそのフローに設定する必要があります。ユーザープロファイル (姓、名 など) をアイデンティティープロバイダー属性で更新する場合は、Sync Mode
を force
に設定することもできます。
このフローは、アイデンティティーを他のアイデンティティープロバイダー (GitHub、Facebook など) に移譲するが、ログインできるユーザーを管理する場合に使用できます。
この設定では、Red Hat build of Keycloak は外部アイデンティティーに対応する内部アカウントを判断できません。Verify Existing Account By Re-authentication オーセンティケーターにより、プロバイダーにユーザー名とパスワードの入力が求められます。