カスタマーアイデンティティおよびアクセス管理(CIAM)とマルチテナンシーのサポート

2024年6月20日 Pedro Igor 著

Keycloak コミュニティの皆様へ

コミュニティおよび Red Hat IT の多くの皆様との協力のおかげで、Keycloak 25 に Keycloak Organizations 機能を提供することになりました。

カスタマーアイデンティティおよびアクセス管理(CIAM)をサポートするための長期的な道のりの始まりを発表できることを嬉しく思います。また、レルムが顧客やビジネスパートナーなどのサードパーティと統合する必要がある場合には、ある程度マルチテナンシーのサポートも行います。

Keycloak Organizations は、Keycloak の既存のアイデンティティおよびアクセス管理(IAM)機能を活用して、ビジネス対ビジネス(B2B)およびビジネス対ビジネス対顧客(B2B2C)統合などの CIAM ユースケースに対応する機能です。レルムから利用可能な既存の機能を活用することで、この機能の最初のリリースでは、レルムがビジネスパートナーや顧客と統合できるようにするための非常にコアな機能を提供します。

この機能は、当初テクノロジープレビュー機能として提供され、最終的な目標は Keycloak 26 でサポートされるようにすることです。この機能のロードマップにはさらに多くの機能があり、この初期機能セットは、その上にさらに多くの機能を構築できる機能のまさにコアであると考えています。そのため、CIAM に関する実際のユースケースを解決するために正しい道を進んでいることを確認するために、皆様からのフィードバックが非常に重要です。

最新のアップデートと次期メジャーリリースで何が提供されるかを確認するために、ナイトリービルドもご確認ください。

機能の詳細については、公式ドキュメントで入手できるドキュメントをご参照ください。

はじめに

Keycloak Organizations 機能では、ユーザーが組織またはレルムのスコープ内で認証しているかどうかを識別するために、レルムへのユーザー認証方法に変更が加えられています。

認証に関してこの機能によって導入された重要な変更の 1 つは、Organizations 設定が有効になっているレルムに認証する際に常に ID ファーストのログインフローが導入されることです。

Keycloak の起動

Keycloak Organization 機能はテクノロジープレビュー機能であり、サーバーの起動時(または最適化されたイメージの構築時)に有効にする必要があります。

docker run --name kc-orgs -d -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8080:8080 quay.io/keycloak/keycloak start-dev --features organization

上記のコマンドを実行したら、https://#:8080/ でサーバーにアクセスできることを確認し、次の認証情報を使用して管理コンソールにログインしてください。

  • ユーザー名: admin

  • パスワード: admin

レルムの作成

まず、orgdemo という名前の新しいレルムを作成しましょう。orgdemo レルムは、サードパーティである organizations と統合したいファーストパーティ企業であり、ユーザーは orgdemo レルムで利用可能なクライアントアプリケーションによって提供される保護されたリソースにアクセスできます。

そのため、管理コンソールから名前として orgdemo を使用して新しいレルムを作成します。

orgdemo レルムにユーザーを作成する

次の手順に従うために、orgdemo レルムにいくつかのユーザーも必要です。

mjane ユーザーは、レルム内のどの組織にも一致しないメールアカウントを持つレルムユーザーです。このユーザーを使用して、組織に関連付けられていない orgdemo レルム内の既存のレルムユーザーを表します。そのためには、次のようにユーザーを作成します。

  • ユーザー名: mjane

  • メール: mjane@orgdemo.com

  • 名: Mary

  • 姓: Jane

レルムに認証できるように、このユーザーのパスワードを設定してください。

次に、alice@orga.com ユーザーを作成します。このユーザーは、組織に設定されたドメインの 1 つに一致するメールを持つ既存のレルムユーザーとして機能しますが、まだ組織のメンバーではありません。このユーザーは、自己登録を通じて、またはカスタムアイデンティティストアとの統合、あるいはレルムから利用可能なアイデンティティプロバイダーからのフェデレーションによって作成された可能性があります。

  • ユーザー名: alice

  • メール: alice@orga.com

  • 名: Alice

  • 姓: Chains

レルムに認証できるように、このユーザーのパスワードを設定してください。

機能が有効になっている場合の認証フローの変更について

レルムが作成されると、認証フローは組織メンバーを認証およびオンボードするための特定の手順を有効にするために自動的に更新されます。更新される認証フローは次のとおりです。

  • browser

  • first broker login

browser フローの主な変更点は、ユーザーが認証情報を求められる前に識別されるように、ID ファーストのログインがデフォルトになることです。first broker login フローに関しては、主な変更点は、組織に関連付けられたアイデンティティプロバイダーを通じて認証し、フローを正常に完了すると、ユーザーを組織メンバーとして自動的に追加することです。

ID ファーストのログインを実行するかどうかの決定は、レルム内の組織の可用性に基づいています。組織がまだ存在しない場合、ユーザーは通常の手順に従って、ユーザー名とパスワード、または browser フローに構成されたその他の手順を使用して認証を行います。

https://#:8080/realms/orgdemo/account にアクセスしてみてください。通常のログインページが表示されます。このページから、次の認証情報を使用して通常どおりレルムに認証できます。

  • ユーザー名: mjane

  • パスワード: <password>

ログインフォームを送信すると、レルムに認証され、ユーザーに代わって動作するクライアントアプリケーション(この場合はアカウントコンソール)に自動的にリダイレクトされます。

組織が存在する場合のレルムへの認証

次に、orgademo レルムに組織を作成しましょう。そのためには、Realm Settings ページに移動し、Organizations 設定を有効にして、レルムの組織を有効にする必要があります。

組織を有効にすると、メニューの Organizations セクションをクリックできます。Create organization ボタンをクリックして、次のように新しい組織を作成します。

  • 名前: OrgA Inc

  • ドメイン: orga.com

orga 組織が作成されたら、クライアントアプリケーションからサインアウトして、再度ログインしてみてください。この時点で、ID ファーストのログインページが表示されるはずです。

以前の試行とは異なり、orgdemo レルムには組織があり、認証フローは認証情報を求める前にユーザーを識別するように変更されました。

ID ファーストのログインページでは、引き続き mjane ユーザーとして認証できます。ただし、ユーザーは 2 つのステップで認証するようになります。最初のステップではユーザー名またはメールのみが要求され、2 番目のステップでパスワードが提供されます。

組織に一致するメール ドメインを使用して存在しないユーザーとして認証を試みる

再度 https://#:8080/realms/orgdemo/account/ にログインして、bob@orga.com と入力してみてください。orgdemo レルムにはそのメールに関連付けられたアカウントはありません。

存在しないユーザーが組織ドメインに一致するメール ドメインを使用して認証を試みると、ID ファーストのログインページが再度表示され、指定されたユーザー名が無効であることが示されます。この時点で、2 番目のステップでユーザーに認証情報を求める理由はありません。

ユーザーが orgdemo レルムに認証し、最終的に orga 組織に参加できるようにするための方法はいくつかあります。

レルムで自己登録設定が有効になっている場合、ユーザーは ID ファーストのログインページの Register リンクをクリックして、orgdemo レルムにアカウントを作成できます。その後、管理者はユーザーに招待リンクを送信するか、手動で orga 組織のメンバーとして追加できます。

組織にドメインが設定されていないアイデンティティプロバイダーがあり、それらが public としてマークされている場合、ユーザーは ID ファーストのログインページのアイデンティティプロバイダーリンクをクリックして、アイデンティティプロバイダーを通じて認証すると、自動的にアカウントを作成して orga 組織に参加することもできます。

上記と同様に、組織に組織ドメインの 1 つで設定されたアイデンティティプロバイダーがある場合、ユーザーはアイデンティティプロバイダーに自動的にリダイレクトされて認証し、フローが完了すると、自動的にアカウントを作成して orga 組織に参加します。

詳細については、公式ドキュメントをご覧ください。

組織ドメインに一致するメール ドメインを使用して既存のユーザーとして認証する

再度 https://#:8080/realms/orgdemo/account/ にログインして、alice@orga.com と入力してみてください。

以前とは異なり、ユーザーには認証情報を提供する 2 番目のステップが表示されるようになりました。ユーザーが orgdemo レルムに存在することを考えると、ユーザーがまだ組織のメンバーでなくても認証できるはずです。

管理者として、後でユーザーを組織への参加に招待するか、手動で組織に追加することを選択できます。

組織に関連付けられたアイデンティティプロバイダーに設定されたドメインに一致するメール ドメインを使用して既存のユーザーとして認証する

この機能を使用すると、組織に関連付けられたアイデンティティプロバイダーにドメインを設定できます。これは、特定のメール ドメインを使用するユーザーが常にアイデンティティプロバイダーを通じて認証するようにする場合に役立ちます。

orgdemo レルムのアイデンティティプロバイダーを使用してユーザーをフェデレーションするために、orga レルムを作成しましょう。アイデンティティプロバイダーは orga 組織に関連付けられます。

orga レルムを作成したら、このレルムに OpenID Connect クライアントを次のように作成します。

  • クライアントタイプ: OpenID Connect

  • クライアント ID: orgdemo-broker

  • クライアント認証: ON

  • 有効なリダイレクト URI: * (簡略化のため * を使用していますが、本番環境では使用しないでください)

次に、orgdemo レルムのアイデンティティプロバイダーを使用して後でこのユーザーをフェデレーションできるように、ユーザーを作成します。

  • ユーザー名: jdoe

  • メール: jdoe@orga.com

  • 名: John

  • 姓: Doe

レルムに認証できるように、このユーザーのパスワードを設定してください。

次に、orgdemo レルムに OpenID Connect アイデンティティプロバイダーを次のように作成しましょう。

  • エイリアス: orga-broker

  • 表示名: OrgA Inc.

  • 検出エンドポイント: https://#:8080/realms/orga/.well-known/openid-configuration

  • クライアント ID: orgdemo-broker

  • クライアントシークレット: <orga レルムで orgdemo-broker クライアントを作成したときに生成された認証情報>

最後に、orgdemo レルムで作成したアイデンティティプロバイダーを orga 組織に関連付け、リンクしましょう。そのためには、メニューの Organizations セクションをクリックし、OrgA Inc 組織を選択します。Identity Providers タブに移動し、Link identity provider ボタンをクリックして、次の設定を入力します。

  • アイデンティティプロバイダー: orga-broker

  • ドメイン: orga.com

  • メール ドメインが一致した場合にリダイレクト: ON

再度 https://#:8080/realms/orgdemo/account/ にログインして、jdoe@orga.com と入力してみてください。ユーザーは自動的に orga レルムにリダイレクトされて認証されます。

レルムにまだ存在しないユーザーが組織ドメインに一致するメール ドメインを使用して認証を試み、そのドメインが組織に関連付けられたアイデンティティプロバイダーにも設定されている場合、ユーザーは自動的にアイデンティティプロバイダーにリダイレクトされます。

これにより、次の認証情報を使用して orga レルムで認証できるようになります。

  • ユーザー名: jdoe@orga.com

  • パスワード: <password>

ユーザーが認証を完了すると、orgdemo レルムに自動的にリダイレクトされてアカウントが作成され、orga 組織に自動的に参加します。

jdoe@orga.com ユーザーとして再度認証した場合も同様です。ただし、今回はユーザーはすでにアイデンティティプロバイダーにリンクされており、常にアイデンティティプロバイダーを通じて認証されます。

レルム内のクライアントから保護されたリソースにアクセスするためにベアラートークンで組織メタデータを使用する

これまでのところ、ユーザーを認証するために orgdemo レルムのアカウントコンソールクライアントを使用してきました。OpenID Connect クライアントとして、アクセストークンは認証が成功した結果として発行されます。

組織のコンテキストで認証する場合、アクセストークンはユーザーがメンバーである組織に関する特定のクレームで自動的に更新されます。

組織固有のクレームをトークンにマッピングするには、クライアントはサーバーに認証リクエストを送信するときに organization スコープをリクエストする必要があります。

その結果、トークンには次のようなクレームが含まれます。

"organization": {
    "orga": {}
}

organization クレームは、クライアント(例: ID トークンから)およびリソースサーバー(例: アクセストークンから)が、ユーザーが所属する組織に基づいて保護されたリソースへのアクセスを承認するために使用できます。

organization スコープは、レルムの組み込みのオプションのクライアントスコープです。そのため、デフォルトでは、レルムで作成されたすべてのクライアントに追加されます。