サーバー管理ガイド
Red Hat Single Sign-On 7.4 向け
概要
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社 の CTO、Chris Wright のメッセージを参照してください。
第1章 概要
Red Hat Single Sign-On は、Web アプリケーションと RESTful Web サービスのソリューションに関するシングルサインオンです。Red Hat Single Sign-On の目的は、アプリケーション開発者が組織にデプロイしたアプリケーションおよびサービスのセキュリティーを保護することができるように、セキュリティーシンプルにすることです。通常、開発者は自分で作成する必要のあるセキュリティー機能は、追加設定なしで提供され、組織の個々の要件に簡単に調整できます。Red Hat Single Sign-On は、ログイン、登録、管理、アカウント管理用にカスタマイズ可能なユーザーインターフェースを提供します。Red Hat Single Sign-On を統合プラットフォームとして使用し、既存の LDAP サーバーと Active Directory サーバーへフックすることもできます。認証を Facebook や Google+ などのサードパーティーのアイデンティティープロバイダーに委任することもできます。
1.1. 機能
- ブラウザーアプリケーションには、Single-Sign On および Single-Sign Out です。
- OpenID Connect のサポート。
- OAuth 2.0 サポート。
- SAML サポート。
- ID ブローカー: 外部 OpenID Connect または SAML ID プロバイダーで認証されます。
- ソーシャルログイン - Google、GitHub、JWT、その他のソーシャルネットワークでのログインを有効にします。
- ユーザーフェデレーション: LDAP および Active Directory サーバーからユーザーを同期します。
- Kerberos ブリッジ: Kerberos サーバーにログインしたユーザーを自動的に認証します。
- ユーザー、ロール、ロールマッピング、クライアント、および設定の一元管理のための管理コンソール。
- ユーザーがアカウントを一元管理できるアカウントマネジメントコンソール。
- テーマサポート: アプリケーションおよびブランディングと統合するユーザー向けページのカスタマイズ。
- 2 要素認証: Google Authenticator または FreeOTP による TOTP/HOTP のサポート
- ログインフロー: オプションのユーザーの自己登録、パスワードのリカバリー、電子メールの確認、パスワードの更新など。
- セッション管理: 管理者およびユーザー自身がユーザーセッションを表示および管理できます。
- トークンマッパー: トークンとステートメントへのユーザーの属性、ロールなどをマップします。
- レルム、アプリケーション、ユーザーごとの失効前ポリシー。
- CORS サポート - クライアントアダプターには CORS のサポートが組み込まれています。
- JavaScript アプリケーション、JBoss EAP、Fuse などのクライアントアダプター。
- OpenID Connect 依存パーティーライブラリーまたは SAML 2.0 サービスプロバイダーライブラリーを持つすべてのプラットフォーム/言語をサポートします。
1.2. セキュリティーが機能する仕組み
Red Hat Single Sign-On は、ネットワーク上で管理する別のサーバーです。アプリケーションは、このサーバーによって提供され、保護されるように設定されています。Red Hat Single Sign-On は、OpenID Connect または SAML 2.0 などのオープンプロトコル標準を使用してアプリケーションを保護します。ブラウザーアプリケーションは、ユーザーのブラウザーをアプリケーションから Red Hat Single Sign-On 認証サーバーにリダイレクトし、ユーザーに認証情報の入力を求めます。ユーザーはアプリケーションから完全に分離され、アプリケーションはユーザーの認証情報を認識しないために重要になります。アプリケーションには、暗号で署名された認証情報トークンまたはアサーションが与えられます。これらのトークンには、ユーザー名、アドレス、電子メール、他のプロファイルデータなどのアイデンティティー情報を使用できます。また、アプリケーションによる承認決定を実行できるように、パーミッションデータを保持することもできます。これらのトークンを使用して、REST ベースのサービスでセキュアな呼び出しを行うこともできます。
1.3. コアとなる概念および利用規約
Web アプリケーションと REST サービスのセキュリティーを保護するには、Red Hat Single Sign-On の使用を試行する前に、いくつかの主要な概念と用語を認識する必要があります。
- ユーザー
- ユーザーは、システムにログインできるエンティティーです。電子メール、ユーザー名、アドレス、電話番号、および日目などの属性を関連付けることができます。グループメンバーシップを割り当てることができ、特定のロールをそれらに割り当てることができます。
- 認証
- ユーザーを特定し、検証するプロセスです。
- 認可
- ユーザーに付与するプロセスです。
- 認証情報
- 認証情報は、Red Hat Single Sign-On がユーザーの ID を検証するために使用するデータの一部です。たとえば、パスワード、ワンタイムパスワード、デジタル証明書、またはフィンガープリントなどが挙げられます。
- ロール
-
ロールはユーザーのタイプまたはカテゴリーを識別します。
Admin
、user
、manager
、employee
は、組織に存在する可能性のある通常のロールすべてです。アプリケーションは通常、多くの場合、個々のユーザーではなく、特定のロールにアクセスおよびパーミッションを割り当てます。これは、ユーザーの処理は複雑で、管理が困難となるためです。 - ユーザーロールのマッピング
- ユーザーロールのマッピングは、ロールとユーザー間のマッピングを定義します。ユーザーをゼロ以上のロールに関連付けることができます。このロールマッピング情報は、アプリケーションが管理するさまざまなリソースのアクセスパーミッションを決定することができるように、トークンとアサーションにカプセル化できます。
- 複合ロール
-
複合ロールは、他のロールに関連付けることができるロールです。たとえば、
superuser
の複合ロールをsales-admin
ロールおよびorder-entry-admin
ロールに関連付けることができます。ユーザーがsuperuser
ロールにマップされている場合は、sales-admin
ロールおよびorder-entry-admin
ロールも継承されます。 - グループ
- グループはユーザーのグループを管理します。グループに対して属性を定義できます。ロールをグループにマッピングすることもできます。グループのメンバーになるユーザーは、そのグループで定義される属性とロールマッピングを継承します。
- レルム
- レルムは、一連のユーザー、認証情報、ロール、およびグループを管理します。ユーザーはレルムに属し、レルムにログインします。レルムは相互に分離され、制御するユーザーのみを管理および認証できます。
- クライアント
- クライアントは、Red Hat Single Sign-On を要求してユーザーを認証できるエンティティーです。多くの場合、クライアントは Red Hat Single Sign-On を使用して自己保護し、シングルサインオンソリューションを提供するアプリケーションとサービスです。クライアントは、ID 情報またはアクセストークンを要求するエンティティーで、Red Hat Single Sign-On によってセキュア化されるネットワーク上でその他のサービスを安全に呼び出すことができるようにすることもできます。
- クライアントアダプター
- クライアントアダプターは、アプリケーション環境にインストールするプラグインで、Red Hat Single Sign-On の通信およびセキュア化を可能にします。Red Hat Single Sign-On には、ダウンロード可能なさまざまなプラットフォームに多くのアダプターがあります。また、サードパーティーのアダプターも、対象外の環境で取得できます。
- consent
- Consent は、クライアントが認証プロセスに参加する前に、ユーザーにクライアントにパーミッションを付与する場合です。ユーザーがクレデンシャルを提供すると、Red Hat Single Sign-On がログインを要求するクライアントを特定する画面と、ユーザーの要求情報を確認する画面が表示されます。ユーザーは、要求を付与するかどうかを決定できます。
- クライアントスコープ
-
クライアントが登録されたら、そのクライアントのプロトコルマッパーとロールスコープマッピングを定義する必要があります。多くの場合、クライアントスコープを保存し、共通の設定を共有することで新しいクライアントの作成を簡素化します。これは、一部の要求またはロールを
scope
パラメーターの値に基づいて条件付きで要求する場合にも便利です。Red Hat Single Sign-On では、このクライアントスコープの概念が提供されています。 - クライアントロール
- クライアントは、それら固有のロールを定義できます。これは基本的に、クライアント専用のロール名前空間です。
- ID トークン
- ユーザーに関する情報を提供するトークン。OpenID Connect 仕様の一部。
- アクセストークン
- 呼び出されるサービスへのアクセスを付与する HTTP リクエストの一部として提供できるトークン。これは、OpenID Connect および OAuth 2.0 仕様の一部です。
- アサーション
- ユーザーに関する情報。これは通常、認証されたユーザーに関連するアイデンティティーメタデータを提供する SAML 認証応答に含まれる XML Blob に関連します。
- サービスアカウント
- 各クライアントには、アクセストークンの取得を可能にする組み込み service account があります。
- 直接付与
- REST 呼び出しでユーザーの代わりにアクセストークンを取得する方法。
- プロトコルマッパー
- 各クライアントについて、OIDC トークンまたは SAML アサーションに保存される要求とアサーションを調整できます。プロトコルマッパーを作成および設定して、クライアントごとにこれを行います。
- セッション
- ユーザーがログインすると、セッションがログインセッションを管理します。セッションには、ユーザーがログインした時や、そのセッション中に単一署名に参加したアプリケーションなどの情報が含まれます。管理者およびユーザーの両方がセッション情報を表示できます。
- ユーザーフェデレーションプロバイダー
- Red Hat Single Sign-On はユーザーを保存して管理できます。多くの場合、ユーザーと認証情報を格納する LDAP または Active Directory サービスがすでにあります。Red Hat Single Sign-On を示すことで、外部ストアから認証情報を検証して ID 情報にプルすることができます。
- アイデンティティープロバイダー
- アイデンティティープロバイダー (IDP) はユーザーを認証できるサービスです。Red Hat Single Sign-On は IDP です。
- ID プロバイダーフェデレーション
- Red Hat Single Sign-On は、1 つ以上の IDP に認証を委譲するように設定できます。Facebook または Google+ でのソーシャルログインは、アイデンティティープロバイダーのフェデレーションの例です。また、Red Hat Single Sign-On のフックを行い、認証を他の OpenID Connect または SAML 2.0 IDP に委任することもできます。
- ID プロバイダーマッパー
- IDP フェデレーションを行う場合は、受信したトークンとアサーションを user および session 属性にマッピングできます。これは、外部の IDP から認証を要求するクライアントに ID 情報を伝播するのに役立ちます。
- 必要なアクション
-
必要なアクションは、ユーザーが認証プロセス中に実行する必要のあるアクションです。ユーザーは、これらのアクションが完了するまで認証プロセスを完了できません。たとえば、管理者はユーザーが毎月パスワードをリセットできるようにスケジュールすることが可能です。これらの全ユーザーに対して、
update password
に必要なアクションが設定されます。 - 認証フロー
- 認証フローは、システムの特定の側面と対話するときにユーザーが実行する必要のあるフローです。ログインフローは必要な認証情報タイプを定義できます。登録フローは、ユーザーが入力しなければならないプロファイル情報や、ボットをフィルターするのに reCAPTCHA などのプロファイル情報を定義します。認証情報リセットフローは、パスワードをリセットする前にユーザーが行うべきアクションを定義します。
- イベント
- イベントは、管理者が表示やフックを表示できる監査ストリームです。
- テーマ
- Red Hat Single Sign-On が提供するすべての画面は、テーマでサポートされます。テーマは、必要に応じて上書きできる HTML テンプレートとスタイルシートを定義します。
第2章 サーバーの初期化
『サーバーインストールおよび設定ガイド』で定義されたインストールおよび設定タスクをすべて実行した後に、最初の管理者アカウントを作成する必要があります。Red Hat Single Sign-On には、追加設定なしで設定されている管理アカウントがありません。このアカウントを使用すると、マスターレルムの管理コンソールにログインしてレルムの作成を開始でき、Red Hat Single Sign-On によるアプリケーション登録を行うことができます。
localhost
からサーバーにアクセス可能な場合は、URL http://localhost:8080/auth に移動してこの管理ユーザーを作成できます。
Welcome ページ
この初期 admin に必要なユーザー名とパスワードを指定するだけです。
localhost
ホストアドレスからサーバーにアクセスできない場合や、コマンドラインから Red Hat Single Sign-On をプロビジョニングする場合は、…/bin/add-user-keycloak
スクリプトで、これを行うことができます。
add-user-keycloak スクリプト
スタンドアロン操作モードまたはドメイン操作モードを使用している場合によって、パラメーターはほとんど異なります。スタンドアロンモードの場合、ここではスクリプトの使用方法を紹介します。
Linux/Unix
$ .../bin/add-user-keycloak.sh -r master -u <username> -p <password>
Windows
> ...\bin\add-user-keycloak.bat -r master -u <username> -p <password>
ドメインモードでは、-sc
スイッチを使用して、スクリプトがサーバーホストの 1 つを参照するようにする必要があります。
Linux/Unix
$ .../bin/add-user-keycloak.sh --sc domain/servers/server-one/configuration -r master -u <username> -p <password>
Windows
> ...\bin\add-user-keycloak.bat --sc domain/servers/server-one/configuration -r master -u <username> -p <password>
第3章 管理コンソール
管理タスクの大部分は、Red Hat Single Sign-On 管理コンソールを介して行われます。http://localhost:8080/auth/admin/ からコンソールの URL に直接アクセスできます。
ログインページ
Welcome Page で作成したユーザー名やパスワードを入力するか、bin ディレクトリーに add-user-keycloak
スクリプトを入力します。これにより、Red Hat Single Sign-On 管理コンソールが作成されます。
管理コンソール
左のドロップダウンメニューでは、管理するレルムを選択したり、新しいレルムを作成したりできます。右側のドロップダウンメニューでは、ユーザーアカウントやログアウトを表示できます。管理コンソール内の特定の機能、ボタン、またはフィールドについて知りたい場合は、クエスチョンマーク (?
) アイコンにマウスを置いてください。これにより、対象のコンソールの領域を説明するヒントテキストがポップアップされます。上記のイメージはアクションのツールチップを示しています。
3.1. マスターレルム
初めて Red Hat Single Sign-On を起動すると、事前定義済みのレルムが作成されます。この初期レルムは master レルムです。レルムの階層で最上位の最上位です。このレルムの管理者アカウントには、サーバーインスタンスで作成されたその他のレルムを表示および管理するためのパーミッションがあります。最初の管理アカウントを定義する際に、master レルムにアカウントを作成します。管理コンソールへの初回ログインも master レルムを介して行われます。
master レルムを使用して組織のユーザーやアプリケーションを管理しないことが推奨されます。super 管理者がシステム内でレルムを作成し、管理するための master レルムの使用を予約します。このセキュリティーモデルに従うことで、誤って変更を回避し、ユーザーアカウントのクリメンティションに従って、現在のタスクの正常な完了に必要な特権と電源へのアクセスを許可します。
master レルムを無効にして、作成する個々の新しいレルム内に管理アカウントを定義することができます。各レルムには独自の専用管理コンソールがあり、ローカルアカウントでログインできます。本ガイドでは、「専用レルムの管理コンソール」の章でこれについて詳しく説明します。
3.2. レルムの新規作成
新規レルムの作成は非常に簡単です。Master
というタイトルの左上にあるドロップダウンメニューにマウスを置きます。マスターレルムにログインしている場合、このドロップダウンメニューには作成されたすべてのレルムが一覧表示されます。このドロップダウンメニューの最後のエントリーは、常に Add Realm
です。クリックしてレルムを追加します。
レルムメニューの追加
このメニューオプションにより、Add Realm
ページが表示されます。定義するレルム名を指定して、Create
ボタンをクリックします。または、新しいレルムを定義する JSON ドキュメントをインポートできます。これについては、「エクスポートとインポート」の章で詳しく説明します。
レルムの作成
レルムを作成したら、メインの Admin Console ページに戻ります。現在のレルムは作成したレルムに設定されます。異なるレルムの管理を切り替えるには、左上隅のドロップダウンメニューでマウスをかざします。
3.3. SSL モード
各レルムには SSL モードが関連付けられています。SSL モード は、レルムと対話するための SSL/HTTPS 要件を定義します。レルムと相互作用するブラウザーおよびアプリケーションは、SSL モードで定義された SSL/HTTPS 要件に従う必要があり、サーバーと対話することはできません。
Red Hat Single Sign-On は、初回実行時に自己署名証明書を生成します。自己署名証明書は安全ではなく、テスト目的でのみ使用する必要があることに注意してください。Red Hat Single Sign-On サーバー自体またはリバースプロキシーに CA 署名の証明書をインストールすることを、Red Hat Single Sign-On サーバーの前にインストールすることが強く推奨されます。詳細は「サーバーインストールおよび設定ガイド」を参照してください。
レルムの SSL モードを設定するには、左側のメニュー項目 Realm Settings
をクリックして Login
タブにアクセスする必要があります。
ログインタブ
Require SSL
オプションでは、必要な SSL モードを選択できます。各モードについて説明します。
- 外部要求
-
ユーザーは、
localhost
、127.0.0.1
、10.x.x.x
、192.168.x.x
、172.16.x.x
などのプライベート IP アドレスに有効な限り、SSL なしで Red Hat Single Sign-On と対話できます。プライベートでない IP アドレスから SSL なしで Red Hat Single Sign-On へのアクセスを試行すると、エラーが発生します。 - none
- Red Hat Single Sign-On には SSL は必要ありません。これは、処理を実行し、サーバーに SSL を設定したくない場合に、この開発でのみ使用する必要があります。
- すべてのリクエスト
- Red Hat Single Sign-On では、すべての IP アドレスに SSL が必要です。
3.4. サーバーキャッシュの消去
Red Hat Single Sign-On は、JVM の制限中または設定している制限内のメモリー内ですべてキャッシュされます。Red Hat Single Sign-On データベースが、サーバーの REST API または管理コンソールの範囲外にあるサードパーティー (DBA) によって変更された場合、インメモリーキャッシュの一部が古い可能性があります。管理者コンソールから Realm Settings
の左メニュー項目と Cache
タブに移動して、リアムキャッシュ、ユーザーキャッシュ、外部公開鍵のキャッシュ (Red Hat Single Sign-On が通常特定の外部エンティティーの署名を検証するのに使用する外部クライアントや ID プロバイダーの公開鍵) をクリアすることができます。
キャッシュタブ
エビクトするキャッシュの clear
ボタンをクリックします。
3.5. メール設定
Red Hat Single Sign-On は、電子メールアドレスをユーザーに送信して、パスワードを忘れた時に、または管理者がサーバーイベントに関する通知を受け取る必要がある場合にメールを送信します。Red Hat Single Sign-On がメールを送信するには、Red Hat Single Sign-On に SMTP サーバー設定を指定する必要があります。これはレルムごとに設定されます。左側のメニュー項目 Realm Settings
に移動し、Email
タブをクリックします。
メールタブ
- Host
-
Host
は、電子メールの送信に使用する SMTP サーバーのホスト名を示します。 - Port
-
Port
は SMTP サーバーポートを示します。 - From
-
From
は、送信したメールのFrom
SMTP-Header に使用されるアドレスを示します。 - From Display Name
-
From Display Name
からは、ユーザーが平易な電子メールアドレスエイリアス (任意) を設定できます。これを設定しないと、平文From
のメールアドレスはメールクライアントに表示されます。 - Reply To
-
Reply To
は、送信されるメールの SMTP-HeaderReply-To
に使用されるアドレスを示します (任意)。これを設定しないと、平文From
のメールアドレスが使用されます。 - Reply To Display Name
-
Reply To Display Name
メールアドレスエイリアス (任意) を設定することができます。これを設定しないと、平文Reply To
メールアドレスが表示されます。 - Envelope From
-
Envelope From
は、送信されるメールのReturn-Path
SMTP-Header に使用される バウンスアドレス を示します (任意)。
メールは、ユーザー名とパスワードを使用して SSL または TLS を使用することが推奨されます (特に SMTP サーバーが外部ネットワーク上にある場合)。SSLを有効にするには Enable SSL
をクリックするか、TLS を有効にするには Enable TLS
をクリックします。ほとんどの場合、Port
も変更する必要があります (SSL/TLS のデフォルトポートは 465 です)。
SMTP サーバーで認証が必要な場合は、Enable Authentication
をクリックし、Username
および Password
を入力します。Password
フィールドの値は、外部 vault からの値を参照できます。
3.6. テーマと国際化
Red Hat Single Sign-On で UI の外観および操作感を変更できます。レルムごとに設定されます。テーマを変更するには、左側のメニュー項目 Realm Settings
に移動し、Themes
タブをクリックします。
テーマタブ
UI カテゴリーごとに必要なテーマを選択し、Save
をクリックします。
- ログインテーマ
- ユーザー名エントリー、OTP エントリー、新しいユーザー登録、およびその他の同様の画面。
- アカウント: テーマ
- 各ユーザーに、ユーザーアカウントの管理 UI があります。
- 管理コンソールのテーマ
- Red Hat Single Sign-On 管理コンソールのスキン。
- メールテーマ
- Red Hat Single Sign-On がメールを送信する必要がある場合には、このテーマに定義されているテンプレートを使用して電子メールを作成します。
『サーバー開発者ガイド』では、新規の作成や既存ものの変更方法について説明します。
3.6.1. 国際化
すべての UI 画面は、Red Hat Single Sign-On で国際化されています。デフォルトの言語は英語ですが、Theme
タブで Internationalization
スイッチをオンにする場合は、サポートするロケールとデフォルトのロケールを選択できます。ユーザーが次にログイン時に、ログイン画面、ユーザーアカウント管理 UI、および管理コンソールに使用するログインページで言語を選択できます。『サーバー開発者ガイド』では、追加の言語を提供する方法を説明します。
3.6.1.1. ユーザーロケールの選択
ユーザーに最適なロケールを選択するには、利用可能な情報に関する最良のロケールを決定するために使用されるロケールセレクタープロバイダーがあります。ここで注意すべき点は、ユーザーが必ずしも認識されているわけではないことです。このため、以前に認証されたユーザーのロケールは、永続化されたクッキーに記憶されています。
ロケールを選択するには、以下の最初の項目を使用します。
- User selected: ドロップダウンロケールセレクターを使用してロケールを選択するとき
- User profile: 認証されたユーザーがあり、ユーザーにロケールセットが推奨されるとき
- Client selected: ui_locales パラメーターなどを使用してクライアントにより渡される
- Cookie: ブラウザーで選択した最後のロケール
-
許可される言語:
Accept-Language
ヘッダーのロケール - レルムのデフォルト
- 上記がない場合は、英語にフォールバックします。
ユーザーが認証されたとき、アクションがトリガーされ、前述の永続化されたクッキーでロケールを更新します。ユーザーがログインページのロケールセレクターでロケールをアクティブに切り替える場合は、この時点でユーザーロケールも更新されます。
第4章 ユーザー管理
本セクションでは、ユーザーを管理する管理機能を説明します。
4.1. ユーザーの検索
特定のユーザーを管理する必要がある場合は、左側のメニューバーの Users
をクリックします。
ユーザー
このメニューオプションを使用すると、ユーザー一覧のページに移動します。検索ボックスでは、ユーザーデータベースに検索するフルネーム、姓、またはメールアドレスに入力できます。このクエリーにより、条件にマッチするすべてのユーザーが起動します。View all users
ボタンは、システム内のすべてのユーザーを一覧表示します。これにより、LDAP などの一部のバックエンドにはユーザー経由でページにアクセスする方法がないため、フェデレーションデータベース (LDAP など) ではなくローカルの Red Hat Single Sign-On データベースのみを検索します。したがって、フェデレーションされたバックエンドのユーザーを Red Hat Single Sign-On データベースと同期させるには、以下のいずれかを実行する必要があります。
- 検索条件を調整します。これにより、Red Hat Single Sign-On データベースへの基準と一致するバックエンドユーザーのみが同期します。
-
User Federation
タブに移動し、フェデレーションプロバイダーとページ内でSync all users
またはSync changed users
をクリックします。
詳細は、「ユーザーフェデレーション」を参照してください。
4.2. 新規ユーザーの作成
ユーザーを作成するには、左側のメニューバーの Users
をクリックします。
ユーザー
このメニューオプションを使用すると、ユーザー一覧のページに移動します。空のユーザー一覧の右側に、ユーザーの Add User
が表示されるはずです。そのユーザーをクリックして、新規ユーザーの作成を開始します。
ユーザーの追加
必須のフィールドは Username
のみです。Save をクリックします。これにより、新しいユーザーの管理ページに移動します。
4.3. ユーザーの削除
ユーザーを削除するには、左側のメニューバーの Users
をクリックします。
ユーザー
このメニューオプションを使用すると、ユーザー一覧のページに移動します。View all users
をクリックするか、検索して削除するユーザーを見つけます。
すべてのユーザーの表示
ユーザーの一覧で、削除するユーザーの横にある Delete
をクリックします。このユーザーの削除を確認するよう求められます。確認ボックスの Delete
をクリックして確定します。
4.4. user 属性
名前やメールなどの基本的なユーザーメタデータ以外に、任意のユーザー属性を保存できます。管理するユーザーを選択し、Attributes
タブをクリックします。
ユーザー
属性名および値に、空白フィールドに値を入力し、その横にある Add
ボタンをクリックして新規フィールドを追加します。このページで作成した編集は、Save
ボタンに到達するまで保存されません。
4.5. ユーザーの認証情報
Credentials
タブにアクセスする際にユーザーを表示すると、ユーザーの認証情報を管理できます。
認証情報の管理
認証情報は、以下のフィールドが含まれる表に一覧表示されます。
- Position
- この列の矢印ボタンでは、最も優先度が高い認証情報の中で、ユーザーの認証情報の優先度を達成できます。この優先順位は、ログイン時にユーザーがどの認証情報が表示されるかを決定します。ユーザーが利用可能な最高の優先度は、選択したものになります。
- Type
-
password
やotp
などの認証情報のタイプを表示します。 - User Label
- これは、ログイン時にクレデンシャルをオプションとして提示する割り当て可能なラベルです。認証情報を記述するために任意の値に設定できます。
- Data
-
これは、認証情報に関する機密性ではない技術情報を表示します。当初は非表示になっていますが、
Show data…
を押して認証情報について表示することができます。 - Actions
-
この列には 2 つのボタンがあります。
Save
はユーザーラベルの値を記録しますが、Delete
は認証情報を削除します。
4.5.1. ユーザーのパスワードの作成
ユーザーにパスワードがない場合や、パスワードが削除されると、ページに Set Password
セクションが表示されます。
認証情報管理 - パスワードを設定する
ユーザーのパスワードを作成するには、新しいパスワードを入力します。すべて入力後に Set Password
ボタンをクリックします。Temporary
スイッチがオンの場合、この新しいパスワードは一度だけ使用でき、ログインした後にパスワードの変更が要求されます。
ユーザーにパスワードがすでにある場合は、Reset Password
セクションでリセットできます。
また、email をセットアップした場合は、ユーザーに電子メールを送信すると、パスワードのリセットを求められます。Reset Actions
リストから Update Password
を選択し、Send Email
をクリックします。任意で、メールリンクの有効性を設定できます。このリンクは、レルム設定の Tokens
タブにデフォルトで設定されます。送信されたメールには、ユーザーがパスワードの更新画面に追加するリンクが含まれます。
ユーザーは、タイプパスワードを 1 つだけ持つことができます。
4.5.2. 他の認証情報の作成
管理コンソール内で、特定ユーザーの他の種類の認証情報を設定することはできません。これはユーザーの責任です。Credentials
タブでユーザーの認証情報を削除できます。たとえば、ユーザーが OTP デバイスを失った場合や、認証情報が侵害されたりするなどの場合にのみ削除できます。
4.5.2.1. OTP の作成
レルムの OTP が条件である場合は、ユーザーは User Account Management サービスにアクセスして新しい OTP ジェネレーターを再設定する必要があります。OTP が必要な場合は、ログイン時に新しい OTP ジェネレーターを再設定するよう求められます。
パスワードと同様に、OTP ジェネレーターをリセットするよう依頼するメールをユーザーに送信できます。Reset Actions
リストボックスで Configure OTP
を選択し、Send Email
ボタンをクリックします。送信されたメールには、OTP 設定画面にユーザーを追加するリンクが含まれます。ユーザーに OTP 認証情報がすでにあり、その他の設定でもこの方法を使用できます。
4.6. 必要なアクション
必要なアクションとは、ログインが許可される前にユーザーが終了する必要があるタスクです。ユーザーは、必要なアクションを実行する前に認証情報を提供する必要があります。必要なアクションが完了すると、ユーザーは再度アクションを実行する必要はありません。以下は、ビルトインの必要なアクションタイプの一部について説明します。
- パスワードの更新
- これが設定されている場合、ユーザーはパスワードを変更する必要があります。
- OTP の設定
- これを設定すると、Free OTP または Google Authenticator アプリケーションのいずれかを使用して、モバイルデバイスにワンタイムパスワードジェネレーターを設定する必要があります。
- メールの確認
- これが設定されている場合、ユーザーは有効なメールアカウントを持っていることを確認する必要があります。電子メールは、クリックする必要のあるリンクと共にユーザーに送信されます。このワークフローが正常に完了したら、ログインが可能になります。
- プロファイルの更新
- この必要なアクションにより、ユーザーにはプロファイル情報を更新するよう要求されます (名前、アドレス、電子メール、電話番号など)。
管理者は、管理コンソールのユーザーの Details
タブ内の個別ユーザーに必要なアクションを追加できます。
必要なアクションの設定
Required User Actions
リストボックスで、アカウントに追加するすべてのアクションを選択します。これを削除する場合は、アクション名の横にある X
をクリックします。また、追加するアクションを決定した後に Save
ボタンをクリックします。
4.6.1. デフォルトに必要なアクション
また、新規ユーザーの作成時にアカウントに追加する必要なアクション (Add User
ボタンをクリックするとユーザー一覧画面、または ログインページの user registration リンクから) を指定することもできます。デフォルトの必須アクションを指定するには、左側のメニュー項目 Authentication
に移動し、Required Actions
タブをクリックします。
デフォルトに必要なアクション
完全に新しいユーザーのログイン時に、実行する必要なアクションの Default Action
コラムのチェックボックスをクリックするだけです。
4.6.2. 契約条件
多くの組織には、新規ユーザーの初回ログイン時に、Web サイトの契約条件に同意する必要があります。Red Hat Single Sign-On には、この機能は必要なアクションとして実装されていますが、いくつかの設定が必要です。いずれかとして、前述の Required Actions
タブに移動し、Terms and Conditions
アクションを有効にする必要があります。base ログインテーマで terms.ftl ファイルを編集する必要もあります。テーマの拡張および作成に関する詳細は、『サーバー開発者ガイド』を参照してください。
4.7. 権限借用
多くの場合、管理者がユーザーの権限を借用すると役立ちます。たとえば、いずれかのアプリケーションにバグが発生し、管理者がその問題を複製できるかをユーザーの権限を借用できます。適切な権限を持つ管理者は、ユーザーの権限を借用できます。管理者が偽装を開始できる場所は 2 つあります。1 つ目は Users
リストタブにあります。
ユーザー
管理者が john
を検索したことが確認できます。John のアカウントの横には、なりすましボタンが表示されます。そのユーザーをクリックしてユーザーの権限を借用します。
また、ユーザーの Details
タブからユーザーの権限を借用できます。
ユーザーの詳細
ページの下部付近に、Impersonate
ボタンが表示されます。そのユーザーをクリックしてユーザーの権限を借用します。
権限借用を行う際、管理者とユーザーが同じレルムにある場合は、管理者がログアウトされ、権限を借用したユーザーとして自動的にログインされます。管理者とユーザーが同じレルムにない場合、管理者はログインしたままになりますが、そのユーザーのレルムにユーザーとしてログインします。いずれの場合も、ブラウザーは、切り替え後のユーザーの「ユーザーアカウント管理」ページにリダイレクトされます。
レルムの impersonation
ロールを持つユーザーは、ユーザーの権限を借用できます。管理パーミッションの割り当てに関する詳細は、「管理コンソールアクセス制御」の章を参照してください。
4.8. ユーザー登録
Red Hat Single Sign-On を有効にして、ユーザーの自己登録を許可することができます。有効化されると、ログインページの登録リンクにより、ユーザーをクリックして新しいアカウントを作成できます。
ユーザーの自己登録を有効にすると、登録フォームを使用して有効なユーザー名と電子メールを検出できます。reCAPTCHA サポート を有効にすることもできます。
登録の有効化は非常に簡単です。左側のメニュー Realm Settings
に移動し、クリックします。次に、Login
タブに移動します。このタブには、User Registration
スイッチがあります。有効化して、Save
ボタンをクリックします。
ログインタブ
この設定を有効にすると、ログインページに 登録
リンクが表示されます。
登録リンク
このリンクをクリックすると、ユーザーが一部ユーザープロファイルの情報と新しいパスワードに入力する必要がある登録ページに移動します。
登録フォーム
登録フォームのルックアンドフィールを変更したり、入力する必要のある追加のフィールドを削除または追加できます。詳細は、『サーバー開発者ガイド』を参照してください。
4.8.1. reCAPTCHA サポート
ボットから登録を保護するために、Red Hat Single Sign-On は Google reCAPTCHA と統合しています。これを有効にするには、最初に Google Recaptcha Website に移動し、reCAPTCHA サイトキーとシークレットを取得できるように API キーを作成する必要があります。(localhost はデフォルトで機能するため、ドメインを指定する必要はありません)。
次に、Red Hat Single Sign-On 管理コンソールで実行する必要がある手順がいくつかあります。左側のメニュー項目 Authentication
をクリックし、Flows
タブに移動します。このページのドロップダウンリストから Registration
フローを選択します。
登録フロー
適切なラジオボタンをクリックして、Required
に 'reCAPTCHA' 要件を設定します。これにより、画面で reCAPTCHA が有効になります。次に、Google reCAPTCHA Website で生成した reCAPTCHA サイトキーおよびシークレットを入力する必要があります。reCAPTCHA フローエントリーの右側にある 'Actions' ボタンをクリックし、"Config" リンクから、この設定ページで reCAPTCHA サイトキーとシークレットを入力します。
reCAPTCHA 設定ページ
最後のステップは、Red Hat Single Sign-On セットのデフォルトの HTTP 応答ヘッダーを変更することです。Red Hat Single Sign-On は、Web サイトに iframe 内に任意のログインページを含めないようにする予定です。これは、クリックジャック攻撃を防ぐためです。Google が iframe 内の登録ページを使用するように承認する必要があります。左側のメニュー項目 Realm Settings
に移動してから、Security Defenses
タブに移動します。https://www.google.com
を、X-Frame-Options
ヘッダーおよび Content-Security-Policy
ヘッダーの値に追加します。
Iframe の承認
これを行うと、登録ページに reCAPTCHA が表示されるはずです。ログインテーマで register.ftl を編集して、reCAPTCHA ボタンの配置およびスタイルで変更できます。テーマの拡張および作成に関する詳細は、『サーバー開発者ガイド』を参照してください。
4.9. Red Hat Single Sign-On により収集された個人データ
デフォルトでは、Red Hat Single Sign-On は以下を収集します。
- メール、名、姓などの基本ユーザープロファイル
- ソーシャルアカウントに使用する基本的なユーザープロファイルとソーシャルログインを使用する場合のソーシャルアカウントへの参照
- IP アドレス、オペレーティングシステム名、ブラウザー名など、監査およびセキュリティー上の目的で収集されるデバイス情報
Red Hat Single Sign-On で収集される情報は、非常にカスタマイズ可能になりました。カスタマイズを行う場合は、以下のガイドラインに注意してください。
- 登録フォームやアカウントフォームには、誕生日、性別、国籍などのカスタムフィールドを含めることができます。管理者は Red Hat Single Sign-On を設定して、LDAP などのソーシャルプロバイダーまたはユーザーストレージプロバイダーからデータを取得できます。
- Red Hat Single Sign-On は、パスワード、OTP コード、WebAuthn 公開鍵などのユーザーの認証情報を収集します。この情報は暗号化されてデータベースに保存されるため、Red Hat Single Sign-On の管理者には表示されないことがありません。ただし、それぞれの種類の認証情報には、パスワードのハッシュに使用されるアルゴリズムやパスワードのハッシュ化に使用されるハッシュ反復数など、管理者が見直す可能性がある、自信的なメタデータを含めることができます。
- 認証サービスおよび UMA サポートを有効にすると、Red Hat Single Sign-On は、特定のユーザーが所有者であるオブジェクトに関する情報を保持できます。たとえば、Red Hat Single Sign-On は、ユーザーの john が、フォトアルバム album with animals と、このアルバムにある lion picture と cow picture という名前のいくつかの写真の所有者であることを追跡することができます。
第5章 ログインページの設定
機能が必要な場合は、有効にできる優れたビルトインログインページ機能があります。
5.1. forgot Password
これを有効にすると、パスワードを取得したり、OTP ジェネレーターを失った場合に、ユーザーは認証情報をリセットできます。左側のメニュー項目 レルム設定
に移動し、Login
タブをクリックします。Forgot Password
スイッチをオンにします。
ログインタブ
ログインページに forgot password
リンクが表示されます。
Forgot Password リンク
このリンクをクリックすると、ユーザーはユーザー名またはメールに入力でき、リンクと共にメールを受信して認証情報をリセットできます。
Forgot Password ページ
電子メールで送信されたテキストは完全に設定可能です。関連するテーマを拡張または編集することのみが必要になります。詳細は、『サーバー開発者ガイド』を参照してください。
ユーザーがメールリンクをクリックすると、パスワードの更新が要求されます。OTP ジェネレーターが設定されていれば、再設定を求められます。電子メールで OTP ジェネレーターをリセットできない組織のセキュリティー要件によっては、電子メールで OTP ジェネレーターをリセットできない場合があります。この動作を変更するには、左側のメニュー項目 Authentication
に移動し、Flows
タブをクリックして Reset Credentials
フローを選択します。
認証情報のリセットフロー
OTP をリセットしない場合は、Reset OTP
の右側にある 無効
なラジオボタンを選択します。
Update Password を Required Actions タブで有効にしたままにしてください。そうしないと、Forgot Password は機能しません。
5.2. Remember Me
ログインしているユーザーがブラウザーを閉じると、セッションは破棄され、再度ログインする必要があります。remember me チェックボックスを選択すればブラウザーが閉じられている場合でも、ログインしたままになるように設定することができます。これは基本的にセッションのみのクッキーから永続クッキーにログインクッキーを実行します。
この機能を有効にするには、左側のメニュー項目 Realm Settings
に移動し、Login
タブをクリックして Remember Me
スイッチをオンにします。
ログインタブ
この設定を保存した後、remember me
チェックボックスがレルムのログインページに表示されます。
Remember Me
第6章 認証
レルムに認証を設定する際に認識する必要がある機能は複数あります。多くの組織には、パスワードと OTP ポリシーが厳しいため、管理コンソールの設定で有効にすることができます。また、認証に異なる認証情報タイプを必要としない場合もあります。Kerberos 経由でログインするオプションを指定するか、さまざまな組み込み認証情報タイプを無効にすることもできます。本章では、これらのトピックをすべて説明します。
6.1. パスワードポリシー
作成された各レルムには、パスワードポリシーが関連付けられていません。ユーザーは、必要時にパスワードをセキュリティー保護していない限り、短期間と設定できます。シンプルな設定は、Red Hat Single Sign-On を開発または学習しても問題ありませんが、実稼働環境では受け入れられません。Red Hat Single Sign-On には、管理コンソールで有効化できるパスワードポリシーのセットがあります。
左側のメニュー項目 Authentication
をクリックし、Password Policy
タブに移動します。右側のドロップダウンリストボックスに、追加するポリシーを選択します。これにより、画面の表にポリシーが追加されます。ポリシーのパラメーターを選択します。Save
ボタンをクリックして変更を保存します。
パスワードポリシー
ポリシーを保存した後、ユーザー登録と更新パスワードが必要なアクションにより、新しいポリシーが強制的に実行されます。ポリシーチェックに失敗するユーザーの例:
失敗したパスワードポリシー
パスワードポリシーを更新したら、すべてのユーザーに更新 パスワード アクションを設定する必要があります。自動トリガーは、今後の拡張機能としてスケジュールされます。
6.1.1. パスワードポリシータイプ
以下は、各ポリシータイプについて説明します。
- ハッシュアルゴリズム
- パスワードはクリアテキストとして保存されません。代わりに、保存または検証する前に、標準のハッシュアルゴリズムを使用してハッシュ化されます。サポートされる値は pbkdf2、pbkdf2-sha256 および pbkdf2-sha512 です。
- ハッシュ化のハッシュ
- この値は、パスワードが格納または検証される前にハッシュ化される回数を指定します。デフォルト値は 27,500 です。このハッシュは、ハッカーがパスワードデータベースにアクセスするというまれなケースで実行されます。データベースへのアクセスを取得したら、元に戻すためのユーザーパスワードを元に戻します。CPU の電源が向上するため、このパラメーターに推奨される値は毎年変わります。ハッシュの反復値が高くなると、ハッシュのために CPU 能力が多くなり、パフォーマンスに影響する可能性があります。パフォーマンスやパスワードストアを保護する上で、より重要な内容を重み付けする必要があります。パスワードストアを保護するには、よりコスト効率の高い方法です。
- 数字
- パスワード文字列に必要な数字の数。
- 小文字の文字
- パスワード文字列に必要な小文字の数。
- 大文字文字
- パスワード文字列に必要な大文字の数。
- 特殊文字
- パスワード文字列に必要な '?!#%$' などの特殊文字の数。
- ユーザー名なし
- これが設定されている場合、パスワードはユーザー名と同じにすることはできません。
- 正規表現
-
パスワードが一致する必要がある 1 つ以上の正規表現パターン (
java.util.regex.Patternで
定義) を定義します。 - パスワードを失効
- パスワードが有効な日数。日数が経過したら、パスワードを変更する必要があります。
- 最近使用されていない
- このポリシーは、以前のパスワードの履歴を保存します。格納される古いパスワードの数は設定可能です。ユーザーがパスワードを変更すると、保存されたパスワードは使用できません。
- パスワードのブラックリスト
-
このポリシーは、特定のパスワード (小文字に変換) がブラックリストファイルに含まれているかどうかを確認します。これは、非常に大きなファイルである可能性があります。パスワードブラックリストは、Unix 行を持つ UTF-8 プレーンテキストファイルで、行はすべてブラックリスト化されたパスワードを表します。大文字と小文字を区別しない比較を容易にするために、ブラックリスト内のパスワードはすべて小文字である必要があります。ブラックリストファイルのファイル名はパスワードポリシーの値として指定する必要があります (例:
10_million_password_list_top_1000000.txt
)。ブラックリストファイルは、デフォルトで${jboss.server.data.dir}/password-blacklists/
に対して解決されます。このパスは、keycloak.password.blacklists.path
システムプロパティーまたはpasswordBlacklist
ポリシー SPI 設定のblacklistsPath
プロパティーを使用してカスタマイズできます。
6.2. OTP ポリシー
Red Hat Single Sign-On には、FreeOTP または Google Authenticator のワンタイムパスワードジェネレーターに設定できるポリシーが複数あります。左側のメニュー項目 Authentication
をクリックし、OTP Policy
タブに移動します。
OTP ポリシー
ここで設定したポリシーは、ワンタイムパスワードの検証に使用されます。OTP を設定する際に、FreeOTP および Google Authenticator は、Red Hat Single Sign-On の OTP set up ページで生成される QR コードをスキャンします。このバーコードは、OTP Policy
タブに設定した情報からも生成されます。
6.2.1. TOTP 対HOTP
OTP ジェネレーターには、以下の 2 つのアルゴリズムを選択できます。時間ベース (TOTP) と番号ベースの (HOTP)TOTP の場合は、トークンジェネレーターが現在の時間と共有の秘密をハッシュ化します。サーバーは、特定の期間内のハッシュと送信された値を比較することで OTP を検証します。そのため、TAOTP は短期間 (通常は 30 秒) にのみ有効です。HOTP では、共有カウンターの現在の時間ではなく、共有カウンターが使用されます。サーバーは、成功した各 OTP ログインでカウンターをインクリメントします。したがって、有効な OTP は、ログインに成功してからしか変更しません。
TOTP は、HOTP の OTP は不確定な時間に対して有効であり、一致可能な OTP は短期間にのみ有効であるため、より安全であると考えられます。HOTP は、ユーザーが時間間隔を稼働する前に OTP に入力する必要がないため、より使いやすいユーザーです。Red Hat Single Sign-On が TOTP に実装されている方法により、この区別がほとんど発生しなくなります。HOTP では、サーバーがカウンターを増やすたびにデータベースを更新する必要があります。負荷が大きい場合、認証サーバーでパフォーマンスが低下する可能性があります。そのため、より効率的な代替機能を提供するために、使用されるパスワードを記憶しません。これにより DB の更新は必要ありませんが、不利な点は TOTP が有効な時間間隔で再度使用される可能性があります。Red Hat Single Sign-On の今後のバージョンでは、TOTP が時間間隔で古い OTP をチェックするかどうかが予定されています。
6.2.2. TOTP 設定オプション
- OTP ハッシュアルゴリズム
- デフォルトは SHA1 です。より安全なオプションは SHA256 と SHA512 です。
- 診断の数
- OTP はどれくらいですか?Short は、ユーザー入力が必要なため、ユーザーフレンドリーであることを意味します。より多くのセキュリティーを意味します。
- Ahead Window の検索
- サーバーを試行してハッシュと一致する間隔はどれくらいですか?これは、TOTP ジェネレーターまたは認証サーバーが同期しなくなった場合にだけ存在します。通常、デフォルト値は 1 で十分です。たとえば、新規トークンの期間が 30 秒間隔である場合、デフォルト値の 1 は、30 秒以内に有効なトークンのみを受け入れることを意味します。この設定値を増やすと、有効なウィンドウが 30 秒後に増えます。
- OTP トークン期間
- サーバーがハッシュと一致する間隔 (秒単位)。間隔がパスするたびに、新しい TOTP がトークンジェネレーターによって生成されます。
6.2.3. HOTP 設定オプション
- OTP ハッシュアルゴリズム
- デフォルトは SHA1 です。より安全なオプションは SHA256 と SHA512 です。
- 診断の数
- OTP はどれくらいですか?Short は、ユーザー入力が必要なため、ユーザーフレンドリーであることを意味します。より多くのセキュリティーを意味します。
- Ahead Window の検索
- サーバーがハッシュを試して一致させるカウンターの数デフォルト値は 1 です。これは、ユーザーのカウンターがサーバーの先に近づくケースに対応するために存在します。これは、ユーザーが特定によって手動でカウンターを手動で増やすことが頻繁に発生する可能性があります。この値は、10 の値などに大きくする必要があります。
- 初期カウンター
- 初期カウンターの値
6.3. 認証フロー
認証フローは、ログイン、登録、およびその他の Red Hat Single Sign-On ワークフロー時に発生する必要のあるすべての認証、画面、およびアクションのコンテナーです。管理コンソールの左側のメニュー項目 Authentication
に移動し、Flows
タブに移動する場合は、システムにある定義されたフローをすべて表示し、各フローに必要なアクションを確認し、チェックすることができます。
6.3.1. 組み込みフロー
Red Hat Single Sign-On には、一定数のビルトインフローが含まれています。これらのフローを変更することはできませんが、ニーズに合わせて要件を変更できます。
本セクションでは、ビルトインのブラウザーログインフローの手順について説明します。左側のドロップダウンリストで、browser
を選択し、以下の画面に移動します。
ブラウザーフロー
フロー選択リストに右にあるヒント (tiny question mark) にマウスをかざすと、フローの内容を説明することになります。
Auth Type
コラムは、実行される認証またはアクションの名前です。認証がインデントされている場合、これはサブフローにあり、親の動作に応じて実行されないことがあります。Requirement
列は、アクションが実行されるかどうかを定義するラジオボタンのセットです。このコンテキストで各ラジオボタンが何をするか説明してください。
6.3.1.1. 実行要件
- 必須
- フローが正常に実行されると評価されるには、フローの必要な要素をすべて成功したものとして評価する必要があります。つまり、要素の 1 つが原因でフローが失敗するのでない限り、フローの Required 要素すべてが上部から順に実行される必要があります。ただし、これは現在のフローに対してのみ当てはまります。サブフロー内の Required 要素は、そのサブフローが入力した場合にのみ処理されます。
- 代替方法
- フローに Alternative 要素のみが含まれる場合、フローが正常に実行されると評価するには、1 つの要素のみを評価する必要があります。フロー内の Required フロー要素はフローを成功としてマークできるため、Required フロー要素が含まれるフロー内の Alternative フロー要素は実行されません。この場合、機能的に Disabled になります。
- Disabled
- Disabled 要素は評価されず、フローが成功したとマーク付けするためにカウントされません。
- 条件
- この要件タイプは、サブフローでのみ設定できます。Conditional のサブフローには「Condition」実行を含めることができます。これらの「Condition」の実行は論理ステートメントとして評価する必要があります。すべての "Condition" 実行が true と評価すると、Conditional が Required としてサブフローが動作します。そうでない場合は、Conditional サブフローが Disabled として動作します。「Condition」実行が設定されていない場合、Conditional サブフローは Disabled として動作します。フローに「Condition」実行が含まれ、Conditions が Conditional に設定されていない場合は、「Condition」の実行は評価されず、機能的に Disabled とみなすことができます。
これは、例で説明する方が適切です。browser
認証フローを順番に説明します。
-
最初の認証タイプは
Cookie
です。ユーザーが初めてログインすると、セッションクッキーが設定されます。このクッキーがすでに設定されている場合、この認証タイプは成功します。この場合、Cookie プロバイダーによって成功が返され、フローのこのレベルの各実行が代替であるため、他の実行は実行されず、ログインに成功します。 -
フローの 2 回目の実行は
Kerberos
の実行を確認します。このオーセンティケーターはデフォルトで無効になっており、スキップされます。 -
3 つ目の実行は、
Identity Provider Redirector
です。これはActions
>Config
リンクを使用して設定し、アイデンティティーブローカー化用に別の IdP に自動的にリダイレクトします。 -
次回の実行は、
Forms
と呼ばれるサブフローです。このサブフローは 代替 としてマークされているため、Cookie
認証タイプが渡されると実行されません。このサブフローには、実行する必要がある追加の認証タイプが含まれます。このサブフローの実行がロードされ、同じ処理ロジックが発生します。 - Forms サブフローでの最初の実行は、Username Password Form です。この認証タイプにより、ユーザー名とパスワードがレンダリングされます。ユーザーは有効なユーザー名とパスワードに入力する必要があるため、required としてマークされます。
-
Forms サブフローの 2 番目の実行は、新しいサブフロー (
Browser - Conditional OTP
サブフロー) です。このサブフローは conditional であるため、どのように実行されるかはCondition - User Configured
実行の評価の結果によって異なります。存在する場合は、このサブフローの実行がロードされ、同じ処理ロジックが発生します。 -
次回実行は
Condition - User Configured
です。これは、フローの他の実行がユーザーに設定されているかどうかを確認します。つまり、Browser - Conditional OTP
サブフローは、ユーザーが OTP 認証情報が設定されている場合にのみ実行されることを意味します。 -
最終的な実行は
OTP Form
です。これは required とマークされますが、conditional サブフローの設定により、ユーザーが OTP 認証情報が設定されている場合にのみ実行されます。心当たりがない場合は、OTP フォームが見られません。
6.3.2. フローの作成
本セクションでは、フローの仕組みをより詳細に行う方法と、独自のフローを作成する方法を説明します。独自のフローを設計する際に、重要な機能とセキュリティー上の考慮事項があることに注意してください。適切に作成されたフローではログインをできないようにし、ユーザーには任意の設定よりも検証が少なくなるか、単にエラーの原因になります。
フローを作成するには、以下のいずれかを行います。
-
既存のフローをコピーし、変更します。これには、既存のフロー (
Browser
フローなど) を選択し、Copy
ボタンを押します。これにより、作成する前に新しいフローの名前を設定するよう要求されます。 -
ゼロから新しいフローを作成します。これを行うには、
New
ボタンを押します。これはより一般的なケースであるため、この例ではこれを使用します。
新しいフローを作成する場合、最上位のフローを作成する必要があります。
最上位フローの作成
以下のオプションを使用します。
- エイリアス
- フローの名前。
- 説明
- フローに設定できる説明。
- 最上位のフロータイプ
-
フローのタイプ。
client
タイプはクライアント (アプリケーション) の認証にのみ使用されます。その他の場合は、generic
を選択します。
フローが作成されたら、New
ボタンおよび Copy
ボタンに加えて、Delete
、Add execution
、および Add flow
の準備を行います。
空の新規フロー
最後のフローは、フローとサブフローの構造、これらのフローの実行、サブフローおよび実行に設定した要件によって決まります。
実行は Add execution
ボタンで追加できます。リセットメールを OTP を検証するためのリセットメールの送信から、実行にはさまざまなアクションを使用できます。Provider
の横にあるツールチップ (tiny question mark) にマウスをかざすと、実行内容が説明されています。
認証実行の追加
これらは 自動実行 と インタラクティブな実行 に分割できます。自動実行 は Cookie
の実行と似ていますが、フローで問題が発生した場合にそれらのアクションが自動的に実行されます。インタラクティブな実行 は、通常は一部のユーザー入力を取得するためにフローを停止します。正常に実行されると、success な状態になります。これはフローが成功したかどうかの一部であるため、これは重要になります。たとえば、空の Browser
フローでは、誰でもログインできなくなります。そのためには、正常に評価された 1 つ以上の実行が必要になります。たとえば、入力されて送信されるユーザー名パスワードフォーム
などがあります。
サブフローは、Add flow
ボタンを使用してトップレベルのフローに追加できます。これにより、Create Execution Flow
ページと非常に似た Create Top Level Form
ページが開きます。唯一の違いは、Flow Type
は generic
(前のように) または form
のいずれかになります。form
タイプは、組み込み Registration
フローに対して行われる内容など、ユーザーの単一フォームを生成するサブフローを構築するために使用されます。サブフローは、実行に含まれる評価方法に応じて、正常に評価される特別な実行タイプです (これには、含まれるサブフローの評価が含まれます)。この評価のロジックは、各実行およびサブフローの要件によって異なります。
この内容の完全な理解には、フローの評価時に要件がどのように機能するかに関する詳細な説明が必要で、これはサブフローにも適用されます。詳細は、上記の実行要件セクションを参照してください。
実行を追加したら、Requirement が正しい値に設定されていることを確認します。必要が 1 つしかない場合でも、設定されない場合もあります。
フローの作成時に、フローに追加したすべての要素には、右側の Actions
メニューが表示されます。フローに追加したすべての要素には、このメニューの Delete
オプションがあり、フローからこれを削除します。Identity Provider Redirector
の場合のように、実行に Config
メニューオプションを含めることができます。Add execution
および Add flow
メニューオプションを使用して、サブフローの実行およびサブフローを追加することもできます。
最後に、実行の順序は重要であるため、名前の左側に設定されている上下ボタンで、実行とサブフローを各フロー内で上下に動かすことができます。
6.3.3. パスワードなしのブラウザーログインフローの作成
フローの作成については、このセクションでは、より高度なブラウザーログインフローの作成について説明します。このフローの目的は、WebAuthn を使用してパスワードなしの方法でログインと、パスワードと OTP を使用した二要素認証を選択することができます。作成するフローは標準のブラウザーログインと似ていますが、ユーザー名の選択に到達すると分岐します。ただし、フローをコピーする代わりに、最初からフローを作成します。
- レルムを選択し、認証リンクをクリックします。
- 「new」を選択し、新規フローに固有のエイリアス (つまり「Browser Password-less」)を付与します。
- 「Add execution」を選択し、ドロップダウンを使用して「Cookie」を選択します。「Save」を押すと、Requirement を Alternative に設定します。
- 「Add execution」を選択し、ドロップダウンメニューで「Kerberos」を選択します。
- 「Add execution」を選択し、ドロップダウンを使用して「Identity Provider Redirector」を選択します。「Save」を押すと、Requirement を Alternative に設定します。
- 「Add flow」を選択し、たとえば典型的なエイリアスを選択します。たとえば「Forms」です。「Save」を押すと、Requirement を Alternative に設定します。
ブラウザーフローの共通部分
-
「Forms」サブフローの右側にある
Actions
メニューを使用して、「Add execution」を選択します。ドロップダウンを使用して「Username Form」を選択します。「Save」を押した後、その Requirement を Required に設定します。
Username フォームは「Browser」フローのユーザー名フォームと似ていますが、ユーザーはパスワードなしのログインを実行できるように、ユーザー名のみを要求します。ただし、これにより Red Hat Single Sign-On サーバーでユーザーの列挙攻撃が可能になります。これは、利便性に避けられないセキュリティーリスクであるため、フローではユーザーが入力すべきパスワードに推測する必要はないはずです。
-
「Forms」サブフローの右側にある
Actions
メニューを使用して、「Add flow」を選択します。代表的なエイリアスを選択します。たとえば、「Authentication」となります。「Save」を押した後、その Requirement を Required に設定します。 -
「Authentication」サブフローの右側にある
Actions
メニューを使用して、「Add execution」を選択します。ドロップダウンを使用して、「WebAuthn passwordless Authenticator」を選択します。「Save」を押すと、Requirement を Alternative に設定します。 -
「 Authentication」サブフローの右側にある
Actions
メニューを使用して、「Add flow」を選択します。代表的なエイリアスを選択します。たとえば、「Password with OTP」です。「Save」を押すと、Requirement を Alternative に設定します。 -
「Password with OTP」サブフローの右側にある
Actions
メニューを使用して、「Add execution」を選択します。ドロップダウンを使用して、「Password Form」を選択します。「Save」を押した後、その Requirement を Required に設定します。 -
「Password with OTP」サブフローの右側にある
Actions
メニューを使用して、「Add execution」を選択します。ドロップダウンを使用して、「OTP Form」を選択します。「Save」を押した後、その Requirement を Required に設定します。 - 「Bindings」メニューで、ブラウザーフローを「Browser」から「Browser Password-less」に変更します。
生成される最終フローは以下のとおりです。
パスワードなしのブラウザーログイン
ユーザー名の入力後、このフローが機能する仕組みは以下のようになります。
- ユーザーに WebAuthn パスワードレス認証情報が記録されている場合は、そのユーザーは、直接ログインするためにそれらを使用できます。これはパスワードなしのログインです。代わりに「Password with OTP」を選択できます。これは、"WebAuthn Passwordless" 実行と "Password with OTP" フローが Alternative に設定されているため、これを実行できます。Required に設定されている場合、ユーザーは WebAuthn、password、および OTP を入力する必要があります。
-
ユーザーが「WebAuthn パスワードレス」認証を使用して画面 で
Try another way
を選択する場合、ユーザーは「Password」と「Security Key」(WebAuthn パスワードレス) のいずれかを選択できます。パスワードを選択すると、ユーザーは 続行して、割り当てられた OTP とともにログインする必要があります。ユーザーに WebAuthn 認証情報がない場合は、最初にパスワードを入力し、続いて OTP を入力する必要があります。ユーザーが OTP 認証情報がない場合は、記録が要求されます。
WebAuthn パスワードレス実行は、Required ではなく Alternative に設定されているため、このフローではユーザーに WebAuthn 認証情報を登録するように要求されることはありません。ユーザーに Webauthn 認証情報を取得するには、そのユーザーに管理者が必要なアクションを追加する必要があります。最初に、Webauthn Register Passwordless
が必要なアクションがレルムで有効になっていることを確認した後 (WebAuthn ドキュメンテーションを参照)、ユーザーの Credentials 管理メニューの Credential Reset
を使用して必要なアクションを設定します。
このような高度なフローを複数作成すると、副次的な影響があります。たとえば、ユーザーのパスワードをリセットできるようにする必要がある場合は、パスワードフォームからアクセスが可能になります。デフォルトの「Reset Credentials」フローでは、ユーザーは自分のユーザー名を入力する必要があります。「Browser Password-less」フローですでにユーザー名をすでに入力されているため、Red Hat Single Sign-On では必要がなく、ユーザーエクスペリエンスの面ではサブ最適となります。これを修正するには、以下が可能になります。
- 「Reset Credentials」フローをコピーし、「パスワードなしの認証情報の設定」など、その名前を設定します。
-
「Choose user」実行の右側にある
Actions
メニューを使用して、「Delete」を選択します。 - 「Bindings」メニューで、「Reset Credentials」から「Reset Credentials for password-less」に対するリセットの認証情報フローを変更します。
6.4. Kerberos
Red Hat Single Sign-On は、SPNEGO プロトコルを使用した Kerberos チケットによるログインをサポートします。SPNEGO (Simple and Protected GSSAPI Negotiation Mechanism) は、セッションのログイン時にユーザーの認証後に web ブラウザーを介して透過的に認証するために使用されます。非 Web ケース、またはログイン時にチケットが利用できない場合、Red Hat Single Sign-On は Kerberos ユーザー名/パスワードでのログインもサポートします。
Web 認証の一般的なユースケースは以下のとおりです。
- ユーザーはデスクトップにログインします (Active Directory ドメイン、または Kerberos 統合が有効になっている Linux マシンの Windows マシン)。
- その後、ユーザーはこのブラウザー (IE/Firefox/Chrome) を使用して、Red Hat Single Sign-On がセキュリティーを確保した Web アプリケーションにアクセスします。
- アプリケーションは、Red Hat Single Sign-On ログインにリダイレクトされます。
-
Red Hat Single Sign-On により、HTML ログイン画面がステータス 401 および HTTP ヘッダー
WWW-Authenticate: Negotiate
でレンダリングされます。 -
ブラウザーにデスクトップログインからの Kerberos チケットがあると、ブラウザーはヘッダー
Authorization: Negotiate 'spnego-token'
で Red Hat Single Sign-On にデスクトップサインオン情報を転送します。それ以外の場合は、ログイン画面が表示されます。 - Red Hat Single Sign-On はブラウザーからトークンを検証し、ユーザーを認証します。LDAP からユーザーデータをプロビジョニングします (LDAPFederationProvider と Kerberos 認証のサポートの場合)、またはユーザーがプロファイルを更新し、事前入力データ (KerberosFederationProvider の場合) を可能にします。
- Red Hat Single Sign-On はアプリケーションに返信します。Red Hat Single Sign-On とアプリケーションの通信は、OpenID Connect または SAML メッセージを通じて行われます。Red Hat Single Sign-On が Kerberos で認証されているということは、アプリケーションから非表示にされます。そのため、Red Hat Single Sign-On は Kerberos/SPNEGO ログインに対してブローカーとして機能します。
設定には主に 3 つの部分があります。
- Kerberos サーバー (KDC) の設定および設定
- Red Hat Single Sign-On サーバーの設定および設定
- クライアントマシンの設定および設定
6.4.1. Kerberos サーバーの設定
これはプラットフォームに依存します。正確な手順は、使用する OS および Kerberos ベンダーによって異なります。Kerberos サーバーの設定および設定方法は、Windows Active Directory、MIT Kerberos、および OS のドキュメントを参照してください。
少なくとも以下が必要です。
- Kerberos データベースにユーザープリンシパルを追加します。Kerberos と LDAP を統合することも可能です。つまり、ユーザーアカウントが LDAP サーバーからプロビジョニングされます。
HTTP サービスのサービスプリンシパルを追加します。たとえば、Red Hat Single Sign-On サーバーが
www.mydomain.org
で動作している場合、MYDOMAIN.ORG が Kerberos レルムであると仮定して、プリンシパルHTTP/www.mydomain.org@MYDOMAIN.ORG
を追加しないといけない場合があります。たとえば、MIT Kerberos では「kadmin」セッションを実行できます。MIT Kerberos である同じマシンにある場合は、コマンドを簡単に使用できます。
sudo kadmin.local
次に、以下のようなコマンドを使用して、HTTP プリンシパルを追加し、キーをキータブファイルにエクスポートします。
addprinc -randkey HTTP/www.mydomain.org@MYDOMAIN.ORG ktadd -k /tmp/http.keytab HTTP/www.mydomain.org@MYDOMAIN.ORG
Keytab ファイル /tmp/http.keytab
は、Red Hat Single Sign-On サーバーが稼働しているホストでアクセスできる必要があります。
6.4.2. Red Hat Single Sign-On サーバーの設定および設定
kerberos クライアントをマシンにインストールする必要があります。これはプラットフォームに依存します。Fedora、Ubuntu、または RHEL の場合は、Kerberos クライアントおよびその他のユーティリティーを含む freeipa-client
パッケージをインストールできます。(Linux 上の /etc/krb5.conf
ファイルにある) kerberos クライアントを設定します。Kerberos レルム と、サーバーが稼働している HTTP ドメインを少なくとも設定する必要があります。レルム MYDOMAIN.ORG の例では、以下のように domain_realm
セクションを設定できます。
[domain_realm] .mydomain.org = MYDOMAIN.ORG mydomain.org = MYDOMAIN.ORG
次に、HTTP プリンシパルで keytab ファイルをエクスポートし、Red Hat Single Sign-On サーバーが実行しているプロセスでファイルにアクセスできることを確認する必要があります。実稼働環境では、このプロセスによってのみ読み取り可能であり、その他のユーザーが行うことは理想的です。上記の MIT Kerberos の例では、キータブを /tmp/http.keytab
にすでにエクスポートしています。KDC と Red Hat Single Sign-On が同じホストで実行されている場合は、このファイルがすでに利用可能な状態である。
6.4.2.1. SPNEGO 処理の有効化
Red Hat Single Sign-On には、デフォルトで SPNEGO プロトコルサポートが有効ではありません。そのため、ブラウザーフロー に移動して Kerberos
を有効にする必要があります。
ブラウザーフロー
Kerberos
要件を disabled から alternative または required のいずれかに切り替えます。Alternative とは基本的に、Kerberos が任意ということになります。ユーザーのブラウザーが SPNEGO/Kerberos と連携するように設定されていない場合は、Red Hat Single Sign-On は通常のログイン画面にフォールバックします。要件を required に設定すると、すべてのユーザーがそのブラウザーに Kerberos を有効にする必要があります。
6.4.2.2. Kerberos ユーザーストレージフェデレーションプロバイダーの設定
SPNEGO プロトコルが認証サーバーで有効になっているようになったので、Red Hat Single Sign-On が Kerberos チケットを解釈する方法を設定する必要があります。これは、ユーザーストレージのフェデレーション を使用して行います。Kerberos 認証をサポートする 2 つの異なるフェデレーションプロバイダーがあります。
LDAP サーバーがサポートする Kerberos で認証する場合は、最初に LDAP Federation Provider を設定する必要があります。LDAP プロバイダーの設定ページを確認する場合は、「Kerberos 統合
」の項を参照してください。
LDAP Kerberos の統合
Allow Kerberos authentication
スイッチをオンにすると、Red Hat Single Sign-On 環境は Kerberos プリンシパルを使用してユーザーに関する情報を検索し、Red Hat Single Sign-On 環境にインポートできるようにします。
Kerberos ソリューションが LDAP サーバーでサポートされていない場合は、Kerberos
User Storage Federation Provider を使用する必要があります。左メニューアイテム User Federation
に移動し、Add provider
選択ボックスから Kerberos
を選択します。
Kerberos ユーザーストレージプロバイダー
このプロバイダーは、簡単なプリンシパル情報の Kerberos チケットを解析し、ローカルの Red Hat Single Sign-On データベースに小規模なインポートを行います。ユーザー名、姓、メールなどのユーザープロファイルの情報はプロビジョニングされません。
6.4.3. クライアントマシンの設定および設定
クライアントは上記のように kerberos クライアントをインストールし、krb5.conf を設定する必要があります。さらに、ブラウザーで SPNEGO ログインサポートを有効にする必要があります。ブラウザーを使用している場合は、「Kerberos 用 Firefox の設定」を参照してください。URI .mydomain.org
は、network.negotiate-auth.trusted-uris
設定オプションで許可される必要があります。
Windows ドメインでは、クライアントは通常、IE はすでに Windows ドメインの SPNEGO 認証に参加できるため、特別な設定を必要としません。
6.4.4. 認証情報の委譲
Kerberos 5 は、認証情報の委譲の概念をサポートしています。このシナリオでは、アプリケーションを使用して Kerberos チケットを再使用して、Kerberos が保護された他のサービスと相互作用できるようになります。SPNEGO プロトコルは Red Hat Single Sign-On サーバーで処理されるため、GSS 認証情報を OpenID Connect トークンクレーム 内のアプリケーションまたは Red Hat Single Sign-On サーバーからアプリケーションに送信される SAML アサーション属性のいずれかに伝播する必要があります。この要求をトークンまたはアサーションに挿入するには、各アプリケーションは gss 委任認証情報
と呼ばれる組み込みプロトコルマッパーを有効にする必要があります。これは、アプリケーションのクライアントページの Mappers
タブで有効にされます。詳細は、「プロトコルマッパー」の章を参照してください。
アプリケーションは、Red Hat Single Sign-On を使用して他のサービスに対して GSS 呼び出しを行う前に、受信する要求を Red Hat Single Sign-On からデシリアライズする必要があります。アクセストークンから GSSCredential オブジェクトに認証情報をデシリアライズしたら、以下のように GSSContext が GSSManager.createContext
メソッドに渡される状態で作成される必要があります。
// Obtain accessToken in your application. KeycloakPrincipal keycloakPrincipal = (KeycloakPrincipal) servletReq.getUserPrincipal(); AccessToken accessToken = keycloakPrincipal.getKeycloakSecurityContext().getToken(); // Retrieve kerberos credential from accessToken and deserialize it String serializedGssCredential = (String) accessToken.getOtherClaims(). get(org.keycloak.common.constants.KerberosConstants.GSS_DELEGATION_CREDENTIAL); GSSCredential deserializedGssCredential = org.keycloak.common.util.KerberosSerializationUtils. deserializeCredential(serializedGssCredential); // Create GSSContext to call other kerberos-secured services GSSContext context = gssManager.createContext(serviceName, krb5Oid, deserializedGssCredential, GSSContext.DEFAULT_LIFETIME);
krb5.conf
ファイルで 転送可能
な kerberos チケットを設定し、委譲された認証情報のサポートをブラウザーに追加する必要があることに注意してください。
認証情報の委譲にはセキュリティーへの影響があるため、必要性が及ぶ場合に限り使用してください。HTTPS と併用することが強く推奨されます。詳細は、「アプリケーションをシングルサインオン向けに設定」の例を参照してください。
6.4.5. レルム間の信頼
Kerberos V5 プロトコルでは、レルム
は Kerberos データベース (通常は LDAP サーバー) で定義される Kerberos プリンシパルのセットです。Kerberos プロトコルには、レルム間の信頼の概念があります。たとえば、2 つの Kerberos レルム A および B がある場合、クロスレルム信頼は、レルム A からのユーザーがレルム B のリソース (サービス) にアクセスできるようにします。これは、レルム B がレルム A を信頼することを意味します。
Kerberos レルム間の信頼
Red Hat Single Sign-On サーバーは、クロスレルム信頼のサポートを持ちます。そのためには、いくつかのことが必要になります。
-
レルム間の信頼用に Kerberos サーバーを設定します。この手順は、使用される具体的な Kerberos サーバー実装によって異なります。通常、Kerberos プリンシパル
krbtgt/B@A
をレルム A と B の Kerberos データベースの両方に追加する必要があります。このプリンシパルは両方の Kerberos レルムに同じ鍵を持つ必要があります。これは通常、プリンシパルに同じパスワード、キーバージョン番号があり、両方のレルムで使用される暗号が同じ場合に実現されます。詳細は、Kerberos サーバーのドキュメントを参照してください。
レルム間の信頼は、デフォルトで一方向です。双方向の信頼でレルム A も信頼レルム B を割り当てる場合は、両方の Kerberos データベースにプリンシパル krbtgt/A@B
も追加する必要があります。ただし、デフォルトでは trust は推移的です。レルム B がレルム A を信頼し、レルム C がレルム B を信頼する場合、レルム C はプリンシパル krbtgt/C@A
が利用可能でなくてもレルム A を自動的に信頼します。クライアントが信頼パスを検索できるように、Kerberos クライアント側で追加の設定 (capaths
など) が必要になる場合があります。詳細は、Kerberos のドキュメントを参照してください。
Red Hat Single Sign-On サーバーの設定
-
Kerberos サポートのある LDAP ストレージプロバイダーを使用する場合は、
HTTP/mydomain.com@B
の例のようにレルム B のサーバープリンシパルを設定する必要があります。Red Hat Single Sign-On サーバーは SPNEGO フローを実行してからユーザーを見つける必要があるため、レルム A からのユーザーが Red Hat Single Sign-On に正常に認証される必要があるため、LDAP サーバーはレルム A からユーザーを見つけなければなりません。たとえば、kerberos プリンシパルユーザーjohn@A
は、uid=john,ou=People,dc=example,dc=com
などの LDAP DN の下にあるユーザーとして利用できるようにする必要があります。レルム A および B からのユーザーの両方を認証する場合は、LDAP がレルム A と B の両方からユーザーを検索できるようにする必要があります。今後のバージョンでこの制限を改善するため、別のレルム用にさらに別の LDAP プロバイダーを作成し、SPN が両方で動作することを確認する必要があります。 -
Kerberos ユーザーストレージプロバイダー (通常は LDAP 統合なしで Kerberos) を使用する場合は、サーバープリンシパルを
HTTP/mydomain.com@B
として設定する必要があります。また、Kerberos レルム A と B の両方が認証できるようにする必要があります。
-
Kerberos サポートのある LDAP ストレージプロバイダーを使用する場合は、
Kerberos ユーザーストレージプロバイダーでは、Kerberos レルム間でユーザーが競合しないようにすることが推奨されます。競合するユーザーが存在する場合は、同じ Red Hat Single Sign-On ユーザーにマッピングされます。これは、今後のバージョンで改善し、Kerberos プリンシパルから Red Hat Single Sign-On ユーザー名へのより柔軟なマッピングを提供します。
6.4.6. トラブルシューティング
問題が発生した場合には、追加のロギングを有効にして問題をデバッグすることが推奨されます。
-
Kerberos または LDAP フェデレーションプロバイダーについて、管理コンソールで
Debug
フラグを有効にする -
standalone/configuration/standalone.xml
のログセクションのカテゴリーorg.keycloak
に対して TRACE を有効にして、standalone/log/server.log
をさらに受け取ります。 -
システムプロパティー
-Dsun.security.krb5.debug=true
および-Dsun.security.spnego.debug=true
を追加します。
6.5. X.509 クライアント証明書ユーザー認証
サーバーが相互 SSL 認証用に設定されている場合、Red Hat Single Sign-On は、X.509 クライアント証明書を使用したログインをサポートします。
一般的なワークフローは以下のとおりです。
- クライアントは SSL/TLS チャンネルで認証リクエストを送信します。
- SSL/TLS ハンドシェイクの間、サーバーとクライアントは x.509/v3 証明書を交換します。
- コンテナー (JBoss EAP) は、証明書 PKIX パスと証明書の有効期限を検証します。
X.509 クライアント証明書オーセンティケーターは、以下のようにクライアント証明書を検証します。
- 必要に応じて、CRL や CRL ディストリビューション Points を使用して証明書失効リストのステータスを確認します。
- オプションで OCSP (Online Certificate Status Protocol) を使用して証明書失効リストのステータスを確認します。
- 必要に応じて、証明書の鍵の使用量が予想されるキー使用量と一致するかどうかを検証します。
- 必要に応じて、証明書の拡張鍵の使用量が予想される拡張鍵の使用と一致するかどうかを検証します。
- 上記のチェックのいずれかが失敗すると、x.509 認証が失敗します。
- それ以外の場合は、オーセンティケーターは証明書 ID を抽出し、既存のユーザーにマップします。
証明書が既存のユーザーにマッピングされると、認証フローに応じてさまざまな動作が行われます。
- ブラウザーフローでは、サーバーはユーザーにアイデンティティーを確認するか、無視するよう指示し、代わりにユーザー名/パスワードでサインインします。
- Direct Grant Flow の場合、サーバーがユーザーサインインします。
6.5.1. 機能
- サポート対象の証明書 ID ソース
- 正規表現を使用した SubjectDN の一致
- X500 サブジェクトの e-mail 属性
- X500 サブジェクトの件名拡張 (RFC822Name 一般名) からのメール
- サブジェクトの別名エクステンションの X500 サブジェクトの他の名前。通常、これは UPN (User Principal Name) です。
- X500 サブジェクトのコモンネーム属性
- 正規表現を使用した IssuerDN の一致
- 証明書のシリアル番号
- Certificate Serial Number および IssuerDN
- SHA-256 証明書サムプリント
- PEM 形式の完全な証明書
- 正規表現
- 証明書アイデンティティーは、フィルターとして正規表現を使用してサブジェクト DN または Issuer DN から抽出できます。たとえば、以下の正規表現は e-mail 属性と一致します。
emailAddress=(.*?)(?:,|$)
正規表現のフィルターは、Identity Source
が、Match SubjectDN using regular expression
または Match IssuerDN using regular expression
のいずれかに設定されている場合にのみ適用されます。
- 既存のユーザーへの証明書 ID のマッピング
-
証明書アイデンティティーのマッピングは、抽出したユーザー ID を既存のユーザーのユーザー名またはメールアドレスにマッピングするか、または証明書 ID に一致するカスタム属性にマッピングするように設定できます。たとえば、
Identity source
を Subject’s e-mail に設定し、User mapping method
を Username or email に設定すると、X.509 クライアント証明書オーセンティケーターは、証明書の Subject DN の e-mail 属性を使用して、ユーザー名または電子メールで既存のユーザーを検索します。
レルム設定で Login with email
を無効にすると、同じルールが証明書認証に適用されることに注意してください。つまり、ユーザーは e-mail 属性を使用してログインできません。
ID ソースに Certificate Serial Number and IssuerDN
を使用するには、2 つのカスタム属性が必要です。1 つはシリアル番号の場合、もう 1 つは IssuerDN です。
SHA-256 Certificate thumbprint
は、SHA-256 証明書のサムプリントの小文字の 16 進数表示です。
ID ソースとしての Full certificate in PEM format
の使用は、LDAP などの外部フェデレーションソースにマッピングされたカスタム属性に限定されます。ただし、制限が長いため、Keycloak データベースには証明書を保存できないため、Always Read Value From LDAP
を有効にする必要があります。
- その他機能: 拡張証明書の検証
- CRL を使用した状態チェックの取り消し
- CRL/分散ポイントを使用した状態チェックの取り消し
- OCSP/Responder URI を使用した状態チェックの取り消し
- Certificate KeyUsage 検証
- 証明書 ExtendedKeyUsage 検証
6.5.2. X.509 クライアント証明書のユーザー認証の有効化
ここでは、JBoss EAP/Undertow および Red Hat Single Sign-On Server を設定して、X.509 クライアント証明書認証を有効にする方法を説明します。
- JBoss EAP での相互 SSL の有効化
JBoss EAP で SSL を有効にする方法については、「SSL の有効化」を参照してください。
- RHSSO_HOME/standalone/configuration/standalone.xml を開き、新しいレルムを追加します。
<security-realms> <security-realm name="ssl-realm"> <server-identities> <ssl> <keystore path="servercert.jks" relative-to="jboss.server.config.dir" keystore-password="servercert password"/> </ssl> </server-identities> <authentication> <truststore path="truststore.jks" relative-to="jboss.server.config.dir" keystore-password="truststore password"/> </authentication> </security-realm> </security-realms>
ssl/keystore
-
ssl
要素には、JKS キーストアからサーバーの公開鍵ペアを読み込む方法を定義するkeystore
要素が含まれます。 ssl/keystore/path
- JKS キーストアへのパス
ssl/keystore/relative-to
- キーストアパスを起点としたパスを定義します
ssl/keystore/keystore-password
- キーストアを開くためのパスワード
ssl/keystore/alias
(オプション)- キーストアのエントリーのエイリアス。キーストアに複数のエントリーが含まれる場合にこれを設定します。
ssl/keystore/key-password
(オプション)- 秘密のキーパスワード (キーストアパスワードと異なる場合)。
authentication/truststore
- トラストストアをロードして、インバウンド/ルーティング接続のリモート側に表示される証明書を検証する方法を定義します。通常、トラストストアには信頼される CA 証明書の集合が含まれます。
authentication/truststore/path
- 信頼される CA (認証局) の証明書を含む JKS キーストアへのパス
authentication/truststore/relative-to
- トラストストアパスが相対するパスを定義します
authentication/truststore/keystore-password
- トラストストアを開くパスワード
- https リスナーの有効化
WildFly で HTTPS を有効にする方法については、「HTTPS リスナー」を参照してください。
- 以下のように <https-listener> 要素を追加します。
<subsystem xmlns="urn:jboss:domain:undertow:10.0"> .... <server name="default-server"> <https-listener name="default" socket-binding="https" security-realm="ssl-realm" verify-client="REQUESTED"/> </server> </subsystem>
https-listener/security-realm
- 値は、前のセクションのレルムの名前に一致する必要があります。
https-listener/verify-client
-
REQUESTED
に設定した場合、サーバーは必要に応じてクライアント証明書を要求します。属性をREQUIRED
に設定すると、クライアント証明書が提供されない場合、サーバーが受信接続を拒否します。
6.5.3. X.509 クライアント証明書認証のブラウザーフローへの追加
- レルムを選択し、認証リンクをクリックし、「Browser」フローを選択します。
- 組み込み「参照」フローのコピーを作成します。新しいフローに区別のある名前を付けます。"X.509 Browser"
- ドロップダウンを使用して、コピーしたフローを選択し、「実行の追加」をクリックします。
- ドロップダウンリストから「X509/Validate Username Form」を選択し、「Save」をクリックします。
- up/down arrows を使用して、「Browser Forms」実行の上に移動し、「X509/Validate Username Form」の順序を変更し、要件を「ALTERNATIVE」に設定します。
- "Bindings" タブを選択し、「Browser Flow」のドロップダウンを見つけます。ドロップダウンメニューから新規作成された X509 ブラウザーフローを選択し、「Save」をクリックします。
- X.509 クライアント証明書認証の設定
-
User Identity Source
- クライアント証明書からユーザー ID を抽出する方法を定義します。
Canonical DN representation enabled
(オプション)- 正規の形式を使用して識別名を判断するかどうかを定義します。この形式は、公式の Java API ドキュメントで詳細に説明されています。このオプションは、2 つの Match SubjectDN using regular expression および Match IssuerDN using regular expression にのみ影響します。新しい Red Hat Single Sign-On インスタンスを設定する場合は、このオプションを有効にすることが推奨されます。既存の Red Hat Single Sign-On インスタンスとの互換性を保つため、このオプションは無効のままにします。
Enable Serial Number hexadecimal representation
(オプション)- シリアル番号の 16 進数表現を使用するオプション。RFC5280, Section-4.1.2.2 を参照してください。記号ビット 1 に設定されたシリアル番号は、00 octet で囲まれている必要があります。例:10 進数値 161 のシリアル番号、または RFC5280 に準拠した 16 進数表示の a1 では、00a1 としてエンコードする必要があります。詳細は RFC5280, appendix-B を参照してください。
A regular expression
(オプション)- 証明書 ID を抽出するためにフィルターとして使用する正規表現を定義します。正規表現には単一のグループが含まれている必要があります。
User Mapping Method
- 証明書の ID を既存ユーザーに一致させる方法を定義します。ユーザー名またはメールアドレスは、ユーザー名またはメールアドレスで既存のユーザーを検索します。Custom Attribute Mapper は、証明書 ID に一致するカスタム属性を使用して既存のユーザーを検索します。カスタム属性の名前は設定可能です。
A name of user attribute
(オプション)- 証明書 ID に対して値と照合されるカスタム属性。属性マッピングが複数の値に関連している場合は、複数のカスタム属性に関連します。以下に例を示します。'Certificate Serial Number および IssuerDN'.
CRL Checking Enabled
(オプション)- 証明書失効リストを使用して、証明書の失効ステータスを確認するかどうかを定義します。
Enable CRL Distribution Point to check certificate revocation status
(オプション)- CDP を使用して証明書失効リストのステータスを確認するかどうかを定義します。ほとんどの PKI 認証局には、証明書に CDP が含まれます。
CRL file path
(オプション)-
CRL リストを含むファイルへのパスを定義します。
CRL Checking Enabled
オプションをオンにする場合は、値を有効なファイルへのパスにする必要があります。 OCSP Checking Enabled
(オプション)- Online Certificate Status Protocol を使用して証明書失効リストのステータスを確認するかどうかを定義します。
OCSP Responder URI
(オプション)- 証明書の OCSP レスポンダー URI の値を上書きできるようにします。
Validate Key Usage
(オプション)- 証明書の KeyUsage 拡張ビットが設定されているかどうかを確認します。たとえば、「digitalSignature,KeyEncipherment」は、KeyUsage 拡張のビット 0 と 2 がアサートされているかどうかを確認します。キー使用の検証を無効にするには、パラメーターを空欄のままにします。RFC5280, Section-4.2.13 を参照してください。サーバーは、発行元 CA が重要なものとしてフラグを付け、キー使用拡張機能の不一致のある場合にのみエラーを出します。
Validate Extended Key Usage
(オプション)- Extended Key Usage 拡張機能で定義された 1 つ以上の目的を検証します。RFC5280, Section-4.2.1.12 を参照してください。Extended Key Usage の検証を無効にするには、パラメーターを空欄のままにします。サーバーは、発行元 CA が重要なものとしてフラグを付け、キー使用拡張機能の不一致のある場合にのみエラーを出します。
Bypass identity confirmation
- 設定されている場合、X.509 クライアント証明書認証により、証明書 ID の確認が求められず、認証に成功するとユーザーに自動的に署名されます。
6.5.4. X.509 クライアント証明書認証の Direct Grant Flow への追加
- Red Hat Single Sign-On 管理コンソールを使用して、「Authentication」をクリックし、「Direct Grant」フローを選択します。
- ビルドイン「Direct Grant」フローのコピーを作成します。新しいフローに区別のある名前を付けます。"X509 Direct Grant",
- ユーザー名の検証およびパスワード "オーセンティケーターを削除します。
- 「Add execution」をクリックし、「X509/Validate Username」を追加し、「Save」をクリックして実行ステップを親フローに追加します。
-
Requirement
を REQUIRED に変更します。
- x.509 Browser Flow セクションで前述の手順に従って x509 認証設定を設定します。
- "Bindings" タブを選択し、「Direct Grant Flow」のドロップダウンを見つけます。ドロップダウンメニューから新規作成された X509 ダイレクトグラントフローを選択し、「Save」をクリックします。
6.5.5. クライアント証明書ルックアップ
HTTP リクエストが Red Hat Single Sign-On サーバーに直接送信されると、JBoss EAP undertow サブシステムは SSL ハンドシェイクを確立し、クライアント証明書を展開します。その後、クライアント証明書はサーブレット仕様で指定されるように HTTP リクエストの javax.servlet.request.X509Certificate
属性に保存されます。Red Hat Single Sign-On X509 オーセンティケーターは、この属性から証明書をルックアップできます。
ただし、Red Hat Single Sign-On サーバーがロードバランサーまたはリバースプロキシーの背後で HTTP 要求をリッスンする場合は、クライアント証明書を抽出し、相互 SSL 接続を確立するプロキシーサーバーである可能性があります。リバースプロキシーは通常、認証されたクライアント証明書を基盤のリクエストの HTTP ヘッダーに配置し、バックエンド Red Hat Single Sign-On サーバーに転送します。この場合、Undertow に対するため、Red Hat Single Sign-On は、HTTP リクエストの属性ではなく、HTTP ヘッダーから X.509 証明書チェーンを検索できる必要があります。
Red Hat Single Sign-On がリバースプロキシーの背後にある場合は、通常 RHSSO_HOME/standalone/configuration/standalone.xml で x509cert-lookup
SPI の代替プロバイダーを設定する必要があります。HTTP ヘッダーから証明書を検索する default
プロバイダーとともに、haproxy
と apache
の 2 つの組み込みプロバイダーもあります。これについては、以下で説明します。
6.5.5.1. HAProxy 証明書ルックアッププロバイダー
Red Hat Single Sign-On サーバーが HAProxy リバースプロキシーの背後に配置されると、このプロバイダーを使用できます。以下のようにサーバーを設定します。
<spi name="x509cert-lookup"> <default-provider>haproxy</default-provider> <provider name="haproxy" enabled="true"> <properties> <property name="sslClientCert" value="SSL_CLIENT_CERT"/> <property name="sslCertChainPrefix" value="CERT_CHAIN"/> <property name="certificateChainLength" value="10"/> </properties> </provider> </spi>
この設定例では、クライアント証明書が HTTP ヘッダー、SSL_CLIENT_CERT
、およびチェーンからの他の証明書が CERT_CHAIN_0
、CERT_CHAIN_1
、CERT_CHAIN_9
などの HTTP ヘッダーから検索されます。certificateChainLength
はチェーンの最大長であるため、最後の試行属性は CERT_CHAIN_9
になります。
クライアント証明書およびクライアント証明書チェーンの HTTP ヘッダーとそれらの適切な名前を設定する方法の詳細は、HAProxy ドキュメントを参照してください。
6.5.5.2. Apache 証明書ルックアッププロバイダー
Red Hat Single Sign-On サーバーが Apache リバースプロキシーの背後にある場合は、このプロバイダーを使用できます。以下のようにサーバーを設定します。
<spi name="x509cert-lookup"> <default-provider>apache</default-provider> <provider name="apache" enabled="true"> <properties> <property name="sslClientCert" value="SSL_CLIENT_CERT"/> <property name="sslCertChainPrefix" value="CERT_CHAIN"/> <property name="certificateChainLength" value="10"/> </properties> </provider> </spi>
この設定は、haproxy
プロバイダーの場合と同じです。クライアント証明書およびクライアント証明書チェーンの HTTP ヘッダーとそれらの適切な名前を設定する方法については、mod_ssl および mod_headers の Apache ドキュメントを参照してください。
6.5.5.3. Nginx 証明書ルックアッププロバイダー
Red Hat Single Sign-On サーバーが Nginx リバースプロキシーの背後に配置されると、このプロバイダーを使用できます。以下のようにサーバーを設定します。
<spi name="x509cert-lookup"> <default-provider>nginx</default-provider> <provider name="nginx" enabled="true"> <properties> <property name="sslClientCert" value="ssl-client-cert"/> <property name="sslCertChainPrefix" value="USELESS"/> <property name="certificateChainLength" value="2"/> </properties> </provider> </spi>
NGINX SSL/TLS モジュールはクライアント証明書チェーンを公開しないため、Keycloak NGINX 証明書ルックアッププロバイダーが Keycloak トラストストアを使用して再ビルドされます。クライアント証明書チェーンを再構築するために必要なすべてのルートおよび中間 CA を持つ keytool CLI を使用して Keycloak トラストストアを設定してください。
クライアント証明書の設定方法については、NGINX のドキュメント を参照してください。NGINX 設定ファイルの例:
... server { ... ssl_client_certificate trusted-ca-list-for-client-auth.pem; ssl_verify_client optional_no_ca; ssl_verify_depth 2; ... location / { ... proxy_set_header ssl-client-cert $ssl_client_escaped_cert; ... } ... }
trusted-ca-list-for-client-auth.pem のすべての証明書を Keycloak トラストストアに追加する必要があります。
6.5.5.4. 他のリバースプロキシーの実装
他のリバースプロキシー実装に対する組み込みサポートはありません。ただし、apache
または haproxy
と同様の方法で、他のリバースプロキシーを動作させることができます。また、これらのプロバイダーも使用可能です。いずれも機能しなくなる場合、org.keycloak.services.x509.X509ClientCertificateLookupFactory
および org.keycloak.services.x509.X509ClientCertificateLookup
プロバイダーの独自の実装を作成しなければならない場合があります。独自のプロバイダーの追加方法については、『サーバー開発者ガイド』 を参照してください。
6.5.6. トラブルシューティング
- HTTP ヘッダーのダンプ
-
Keycloak に送信されるリバースプロキシーを確認する場合は、Undertow フィルターである
RequestDumpingHandler
を有効にし、server.log
ファイルを参照してください。 - logging サブシステムで TRACE ロギングを有効化
... <profile> <subsystem xmlns="urn:jboss:domain:logging:3.0"> ... <logger category="org.keycloak.authentication.authenticators.x509"> <level name="TRACE"/> </logger> <logger category="org.keycloak.services.x509"> <level name="TRACE"/> </logger>
WARNING: Don't use RequestDumpingHandler or TRACE logging in production.
- X.509 での直接認証
- 以下のテンプレートを使用して、Resource Owner Password Credentials Grant を使用してトークンを要求できます。
$ curl https://[host][:port]/auth/realms/master/protocol/openid-connect/token \ --insecure \ --data "grant_type=password&scope=openid profile&username=&password=&client_id=CLIENT_ID&client_secret=CLIENT_SECRET" \ -E /path/to/client_cert.crt \ --key /path/to/client_cert.key
[host][:port]
- Direct Grant Flow を使用して x.509 クライアント証明書で認証できるように設定されたリモート Red Hat Single Sign-On サーバーのホストとポート番号。
CLIENT_ID
- クライアント ID。
CLIENT_SECRET
- 機密クライアントの場合は、クライアントシークレットです。そうでなければ、空欄のままにします。
client_cert.crt
- 相互 SSL 認証でクライアントの ID を検証するために使用される公開鍵証明書。証明書は PEM 形式である必要があります。
client_cert.key
- 公開鍵のペアの秘密鍵。PEM 形式でも想定されます。
6.6. W3C Web 認証 (WebAuthn)
Red Hat Single Sign-On では、W3C Web 認証 (WebAuthn) のサポートは限定的です。Red Hat Single Sign-On は、WebAuthn の Relying Party (RP) として機能します。
WebAuthn は テクノロジープレビュー であるため、完全にサポートされていません。この機能はデフォルトでは無効にされます。
-Dkeycloak.profile=preview
または -Dkeycloak.profile.feature.web_authn=enabled
でサーバーの起動を有効にするには、以下を行います、詳細は「プロファイル」を参照してください。
WebAuthn 操作が成功するかどうかは、オーセンティケーター、ブラウザー、およびプラットフォームをサポートするユーザーの WebAuthn によって異なります。この WebAuthn サポートを使用する場合は、これらのエンティティーが WebAuthn 仕様をサポートするエクステントを明確にしてください。
6.6.1. setup
2FA の WebAuthn サポートの設定手順は、以下のようになります。
6.6.1.1. Webauthn Authenticator 登録の有効化
管理者は、Admin Console
で以下の操作を実行します。
-
Authentication → Required Actions
タブを開きます。 -
Register
をクリックします。 -
Webauthn Register
を必要なアクション
として選択します。 -
有効
のチェックボックスにチェックを付けます。新規に作成されたユーザーをすべて WebAuthn 認証情報を登録する必要がある場合は、オプションでデフォルトのアクション
チェックボックスにマークを付けます。
6.6.1.2. WebAuthn 認証のブラウザーフローへの追加
-
レルムを選択し、
Authentication
のリンクをクリックし、ブラウザー
フローを選択します。 - 組み込み「参照」フローのコピーを作成します。新しいフローに、"WebAuthn Browser" など、区別的な名前を付けてください。
- ドロップダウンを使用して、コピーしたフローを選択します。
-
Actions
メニューを使用してWebAuthn Browser Browser - Conditional OTP
サブフローを削除します。
全ユーザーに WebAuthn が必要な場合は、以下を実行します。
-
WebAuthn Browser Forms
のActions
メニューを使用して、Add execution
をクリックします。 -
ドロップダウンを使用して
WebAuthn Authenticator
を選択し、Save
をクリックします。 - Requirement を Required に設定します。
-
Bindings
メニューで、ブラウザーフローをWebAuthn ブラウザー
に変更します。
このシナリオでは、ユーザーに WebAuthn 認証情報がない場合は、そのユーザーが強制的に登録するように必要なアクションが設定されることに注意してください。
または、WebAuthn 認証情報が登録されている場合にのみ、WebAuthn でログインできます。そのため、WebAuthn Authenticator
の実行を追加する代わりに、ユーザーが WebAuthn 認証情報を登録することもできます。
-
WebAuthn Browser Forms
のActions
メニューを使用して、Add flow
をクリックします。 -
エイリアスを「Conditional 2FA」に設定し、
Save
をクリックします。 -
Conditional 2FA
の要件を Conditional に設定します。 -
Conditional 2FA
のActions
メニューを使用して、Add execution
をクリックします。 -
ドロップダウンを使用して
Condition - User Configured
を選択し、Save
をクリックします。 -
Condition - User Configured
の要件を Requiredに設定します。 -
Conditional 2FA
のActions
メニューを使用して、Add execution
をクリックします。 -
ドロップダウンを使用して
WebAuthn Authenticator
を選択し、Save
をクリックします。 - Requirement を Alternative に設定します。
また、WebAuthn と OTP を使用して、2 番目の係数の使用を選択することもできます。
-
Conditional 2FA
のActions
メニューを使用して、Add execution
をクリックします。 -
ドロップダウンを使用して
OTP Form
を選択し、Save
をクリックします。 - Requirement を Alternative に設定します。
6.6.2. WebAuthn Authenticator での認証
WebAuthn オーセンティケーターを登録した後、ユーザーは WebAuthn Authenticator
を使用して条件付きサブフローで上記の認証フロー設定が使用されていることを前提としています。
- ログインフォームを開きます。ユーザーは、ユーザー名とパスワードで認証する必要があります。
- ユーザーのブラウザーは、WebAuthn オーセンティケーターによる認証をユーザーに要求します。
6.6.3. 管理者として WebAuthn の管理
6.6.3.1. 認証情報の管理
WebAuthn の認証情報は、ユーザー認証情報管理 から OTP などの他の認証情報と同様に管理されます。
-
ユーザーには必要なアクションを割り当て
、Reset Actions
リストから WebAuthn 認証情報を作成し、Webauthn Register
を選択します。 -
管理者は、
Delete
を押すと WebAuthn 認証情報を削除できます。 -
管理者は
Show data…
を選択して、AAGUID などの認証情報のデータを表示できます。 -
管理者は、
User Label
フィールドに値を設定し、データを保存することで、認証情報のラベルを設定できます。
6.6.3.2. ポリシーの管理
管理者は、WebAuthn 関連の操作をレルムごとに WebAuthn Policy
として設定できます。
管理者は、Admin Console
で以下の操作を実行します。
-
Authentication → WebAuthn Policy
タブを開きます。 -
項目を設定し、
Save
をクリックします。
設定可能な項目とその説明を以下に示します。
設定 | 説明 |
---|---|
エンティティー名の使用 | 人間が判読できるサーバー名を WebAuthn Relying Party として実行します。これは、WebAuthn オーセンティケーターの登録の操作に適用される必須の設定です。デフォルト設定は「keycloak」です。詳細は、「WebAuthn Specification」を参照してください。 |
署名アルゴリズム | これは、認証アセンション の署名および検証に使用できる 公開鍵認証情報 に使用する署名アルゴリズムを WebAuthn オーセンティケーターに指示します。複数のアルゴリズムを指定できます。アルゴリズムが指定されていない場合は、ES256 が適合します。デフォルト設定は ES256 です。これは、WebAuthn オーセンティケーターの登録の操作に適用される任意の設定アイテムです。詳細は、「WebAuthn Specification」を参照してください。 |
パート ID の使用 | これは、WebAuthn Relying Party として ID で、公開鍵の認証情報の範囲を決定します。これは、オリジンの有効なドメインでなければなりません。これは、WebAuthn オーセンティケーターの登録の操作に適用される任意の設定アイテムです。エントリーを入力しないと、Red Hat Single Sign-On サーバーのベース URL のホストの部分が適用されます。詳細は、「WebAuthn Specification」を参照してください。 |
証明の伝達設定 | これは、ブラウザー (WebAuthn クライアント)で WebAuthnAPI 実装に、Attestation ステートメントの生成方法の優先度を指示します。これは、WebAuthn オーセンティケーターの登録の操作に適用される任意の設定アイテムです。オプションが選択されていない場合、その動作は「none」の選択と同じになります。詳細は、「WebAuthn Specification」を参照してください。 |
オーセンティケーター添付 | これは、WebAuthn オーセンティケーターの許容割り当てパターンを WebAuthn Client に伝えます。これは、WebAuthn オーセンティケーターの登録の操作に適用される任意の設定アイテムです。このオプションが選択されていない場合、WebAuthn Client はアタッチメントパターンを考慮しません。詳細は、「WebAuthn Specification」を参照してください。 |
識別キーが必要 | これは WebAuthn オーセンティケーターに対し、公開鍵認証情報を クライアント側の公開鍵認証情報ソース として生成するよう指示します。これは、WebAuthn オーセンティケーターの登録の操作に適用される任意の設定アイテムです。オプションが選択されていない場合、その動作は「No」を選択するのと同じになります。詳細は、「WebAuthn Specification」を参照してください。 |
ユーザー検証要件 | WebAuthn オーセンティケーターに対して、ユーザーが実際に検証されていることを確認するように指示します。これは、WebAuthn オーセンティケーターの登録と認証の操作に適用される任意の設定アイテムです。オプションが選択されていない場合、その動作は「推奨」を選択することと同じになります。詳細は、「WebAuthn Specification for registering a WebAuthn authenticator」および「WebAuthn Specification for authenticating the user by a WebAuthn authenticator」を参照してください。 |
タイムアウト | WebAuthn オーセンティケーターに登録し、WebAuthn オーセンティケーターでユーザーを認証するタイムアウト値を秒単位で指定します。0 に設定した場合は、WebAuthn オーセンティケーターの実装によって異なります。デフォルト値は 0 です。詳細は、「WebAuthn Specification for registering a WebAuthn authenticator」および「WebAuthn Specification for authenticating the user by a WebAuthn authenticator」を参照してください。 |
同じオーセンティケーター登録の回避 | 「ON」に設定すると、登録済みの WebAuthn オーセンティケーターが登録できません。これは、WebAuthn オーセンティケーターの登録の操作に適用されます。デフォルト設定は「OFF」です。 |
許可される AAGUID | WebAuthn オーセンティケーターを登録することができる AAGUID のホワイトリストこれは、WebAuthn オーセンティケーターの登録の操作に適用されます。このリストにエントリーが設定されていない場合は、すべての WebAuthn オーセンティケーターを登録できます。 |
6.6.4. 調整ステートメントの検証
WebAuthn オーセンティケーターを登録すると、Red Hat Single Sign-On は、この WebAuthn オーセンティケーターが生成した証明ステートメントを検証します。この検証プロセスでは、Red Hat Single Sign-On はこれをテストステートメントを信頼し、これを検証します。トラストアンカーの証明書が必要です。Red Hat Single Sign-On は Keycloak トラストストア を使用するため、事前にこれらの証明書をインポートする必要があります。
attestation statement trustworthiness 検証を省略する場合は、このトラストストアを無効にするか、WebAuthn ポリシーの設定アイテム "Attestation Conveyance Preference" を "none" に設定してください。
6.6.5. ユーザーとして WebAuthn 認証情報の管理
6.6.5.1. WebAuthn Authenticator の登録
WebAuthn オーセンティケーターを登録する適切な方法は、ユーザーが Red Hat Single Sign-On にアカウントを登録しているかどうかによって異なります。
- 新規ユーザー
WebAuthn Register
必須の操作をレルムでDefault Action
として設定している場合、最初のログインに成功すると WebAuthn セキュリティーキーの設定に新しいユーザーが必要になります。新規ユーザーは以下の操作を実行します。- ログインフォームを開きます。
-
Register
リンクをクリックします。 -
登録フォームに項目を入力し、
Register
をクリックします。 - ユーザーのブラウザーは、WebAuthn オーセンティケーターを登録するようユーザーに要求します。
- 登録に成功すると、ユーザーのブラウザーは、登録済み WebAuthn オーセンティケーターのラベルとしてテキストを入力するよう要求します。
- 既存ユーザー
最初の例のように
WebAuthn Authenticator
が必要に応じて設定されている場合、既存のユーザーがログインを試みる際に、WebAuthn オーセンティケーターを自動的に登録する必要があります。- ログインフォームを開きます。
-
項目を入力し、
Save
をクリックしてLogin
をクリックします。 - ユーザーがログインしたら、WebAuthn オーセンティケーターを登録する必要があります。
- 登録に成功すると、ユーザーのブラウザーは、登録済み WebAuthn オーセンティケーターのラベルとしてテキストを入力するよう要求します。
6.6.6. パスワードなしの WebAuthn と 2 つのファクターの組み合わせ
WebAuthn は頻繁に 2 要素認証に使用されますが、ファクター認証として使用することもできます。この場合、パスワードなし
の WebAuthn 認証情報を持つユーザーは、パスワードなしで Red Hat Single Sign-On に対して認証できます。Red Hat Single Sign-Onでは、単一のレルムのコンテキストで、さらには単一の認証フローのコンテキストでも、パスワードなしおよび2 要素の認証メカニズムとして WebAuthn を使用できます。
管理者は、通常、WebAuthn パスワードレス認証でユーザーが登録するセキュリティーキーが異なる (通常はより強力な) 要件を満たす必要があることがあります。たとえば、そのセキュリティー鍵では、PIN を使用してそのセキュリティーキーに対する認証が必要になることがあり、セキュリティーキーは強力な認証局でテストする必要があります。
このような状況では、Red Hat Single Sign-On により、管理者は個別の WebAuthn パスワードレスポリシー
を設定できます。別の認証タイプ WebAuthn Passwordless Authenticator
と、別の必須アクションのタイプWebauthn Register Passwordless
があります。
6.6.6.1. setup
WebAuthn パスワードレスサポートのセットアップ手順は、以下のとおりです。
-
WebAuthn パスワードレスサポートに必要な新しいアクションを登録します。
Webauthn Register Passwordless
パスワードレスというアクションを登録する必要がある唯一の違いは、上記 の手順と同じ手順を使用してください。 -
ポリシーを設定します。上記 の手順と設定オプションは同じですが、
WebAuthn Passwordless Policy
タブ の管理コンソールで設定する必要があります。このポリシーを必要に応じて設定できますが、通常、2 要素ポリシーよりもセキュリティーキーの要件はより強力になります。たとえば、パスワードレスポリシーの設定時に、User Verfication Reuqirement
をRequired
に設定できます。 最後に認証フローを設定します。上記の説明にあるように
WebAuthn Browser
と同じフローを使用すると仮定します。ただし、以下のように設定します。-
WebAuthn ブラウザー
サブフローには、最初のオーセンティケーターとしてユーザー名フォーム
が含まれます。デフォルトのUsername Password Form
オーセンティケーターを削除し、代わりにUsername Form
オーセンティケーターを追加します。この設定は、最初のステップとしてユーザーがユーザー名を提供することを意味します。 -
必要なサブフロー (
Passwordless Or Two-factor
等) があります。この設定は、Passwordless WebAuthn 認証情報または Two-factor 認証のいずれかで認証できることを示しています。 -
フローには、最初の代替
WebAuthn Passwordless Authenticator
が含まれます。 -
2 つ目の代替は、
Password And Two-factor Webauthn
などのサブフローです。このサブフローには、Password Form
とWebAuthn Authenticator
が含まれます。
-
フローの最後の設定は以下のようになります。
Red Hat Single Sign-On にすでに知られている一部のユーザーに、必要なアクションとして WebAuthn Register Passwordless
を追加してテストできるようになりました。最初の認証時に、ユーザーはパスワードおよび二次的な WebAuthn 認証情報を使用する必要があります。ただし、ユーザーが認証情報を登録すると、そのユーザーは今後の認証時に選択できます。WebAuthn パスワードレス認証情報を使用する場合は、パスワードと 2 要素 WebAuthn 認証情報を指定する必要はありません。
第7章 SSO プロトコル
本章では、認証プロトコルの概要と、Red Hat Single Sign-On 認証サーバーの概要と、そのプロトコルをセキュアにするアプリケーションについて概説します。
7.1. OpenID Connect
OpenID Connect (OIDC) は、OAuth 2.0 の拡張機能である認証プロトコルです。OAuth 2.0 は承認プロトコルを構築するためのフレームワークでしかなく、主に不完全ですが、OIDC は完全な認証および承認プロトコルです。OIDC は、JWT (Json Web Token) 標準セットも多用しています。これらの標準は、アイデンティティープロバイダーの JSON 形式を定義し、そのデータをコンパクトで Web フレンドリーで暗号化する方法を定義しています。
OIDC を使用する場合は、本当に 2 つのタイプのユースケースがあります。1 つ目のアプリケーションは、Red Hat Single Sign-On サーバーがユーザーを認証するよう依頼するアプリケーションです。ログインに成功すると、アプリケーションは ID トークン と アクセストークン を受け取ります。ID トークン には、ユーザー名、電子メール、その他のプロファイル情報など、ユーザーに関する情報が含まれています。アクセストークン はレルムによってデジタル署名され、アプリケーションでユーザーがアクセスできるリソースを判別するためにアプリケーションが使用できるアクセス情報 (ユーザーロールマッピングなど) が含まれます。
2 つ目のタイプのユースケースは、リモートサービスへのアクセスを取得するクライアントのものです。この場合、クライアントはユーザーの代わりに他のリモートサービスで起動するのに使用できる アクセストークン を取得するよう Red Hat Single Sign-On に要求します。Red Hat Single Sign-On はユーザーを認証し、ユーザーに要求したクライアントにアクセスを付与するよう依頼します。その後、クライアントは アクセストークン を受け取ります。この アクセストークン はレルムによってデジタル署名されます。クライアントはこの アクセストークン を使用してリモートサービスで REST 呼び出しを行うことができます。REST サービスは、アクセストークン を抽出し、トークンの署名を検証した後、トークン内のアクセス情報に基づいて、リクエストを処理するかどうかを決定します。
7.1.1. OIDC 認証フロー
OIDC は、クライアントまたはアプリケーションがユーザーを認証し、アイデンティティー および アクセス トークンを受け取る方法は異なります。使用するパスは、アクセスを要求するアプリケーションまたはクライアントのタイプに大きく依存します。これらのフローはすべて OIDC および OAuth 2.0 仕様 に説明されるため、ここでは簡単な概要のみが提供されます。
7.1.1.1. 認可コードフロー
これはブラウザーベースのプロトコルであり、ブラウザーベースのアプリケーションの認証および承認に使用することが推奨されるものです。大量のブラウザーのリダイレクトを使用してアイデンティティーおよびアクセストークンを取得します。以下は簡単な概要です。
- ブラウザーはアプリケーションにアクセスします。このアプリケーションはユーザーがログインしていないことを認識し、ブラウザーを Red Hat Single Sign-On にリダイレクトして認証されます。アプリケーションは、このブラウザーリダイレクトのクエリーパラメーターとしてコールバック URL (リダイレクト URL) を渡します。このブラウザーリダイレクトでは、認証が終了すると Red Hat Single Sign-On が使用するようになります。
- Red Hat Single Sign-On がユーザーを認証し、1 回限り非常に短い一時的なコードを作成します。Red Hat Single Sign-On は、先に提供されたコールバック URL を使用してアプリケーションにリダイレクトし、さらに一時コードをコールバック URL にクエリーパラメーターとして追加します。
- アプリケーションは一時コードを抽出し、Red Hat Single Sign-On に帯域外 REST 呼び出しをバックグラウンドにし、アイデンティティー、アクセス、リフレッシュ トークンのコードを交換します。この一時的なコードはトークンを取得する一度使用した後、再度使用することができません。これにより、再生攻撃を防ぐことができます。
アクセストークンは通常、生み上回り、分単位で有効期限が切れてから期限切れになることに留意することが重要です。ログインプロトコルによって送信された追加のリフレッシュトークンにより、アプリケーションは有効期限が切れた後に新しいアクセストークンを取得できます。危険にさらされたシステムの状況では、この更新プロトコルが重要になります。アクセストークンの有効期間が短くなると、システム全体がアクセストークンの有効期間中は盗難トークンしか脆弱になります。admin のアクセスが取り消されると、今後の更新トークン要求は失敗します。これにより、より安全でより拡張性が高まります。
このフローのもう 1 つの重要な点として、パブリック と 機密性 のあるクライアントの概念があります。トークンの一時コードを交換する際にクライアントシークレットを提供するには、Confidential クライアントが必要です。パブリッククライアントは、このクライアントシークレットを提供するのには必要ありません。パブリッククライアントは、HTTPS が厳密に強制され、クライアントに登録されているリダイレクト URI が非常に厳格である限り問題ありません。クライアントシークレットをセキュアに送信する方法がないため、HTML5/JavaScript クライアントは常に public クライアントである必要があります。この場合も問題ありません。したがって、HTTPS を使用し、リダイレクト URI 登録を厳密に強制する限り問題となります。本ガイドは、『クライアントの管理』の章で詳しく説明しています。
Red Hat Single Sign-On は、任意の Proof Key for Code Exchange もサポートします。
7.1.1.2. インプリシットフロー
これは、リクエストが少なく、更新トークンがないこと以外は Authorization Code Flow に類似したブラウザーベースのプロトコルです。アクセス トークンがリダイレクト URI 経由で送信されるため、ブラウザー履歴でリークされる可能性が残るため、このフローは推奨しません (以下を参照)。また、このフローは更新トークンでクライアントを提供しないため、アクセストークンは有効期間が長くなるか、ユーザーの有効期限が切れたときに再認証する必要があります。このフローは OIDC および OAuth 2.0 仕様にあるためサポートされます。以下は、プロトコルの概要です。
- ブラウザーはアプリケーションにアクセスします。このアプリケーションはユーザーがログインしていないことを認識し、ブラウザーを Red Hat Single Sign-On にリダイレクトして認証されます。アプリケーションは、このブラウザーリダイレクトのクエリーパラメーターとしてコールバック URL (リダイレクト URL) を渡します。このブラウザーリダイレクトでは、認証が終了すると Red Hat Single Sign-On が使用するようになります。
- Red Hat Single Sign-On はユーザーを認証し、identity および access トークンを作成します。Red Hat Single Sign-On は、先に提供されたコールバック URL を使用してアプリケーションにリダイレクトし、さらにコールバック URL のクエリーパラメーターとして identity および access トークンを追加します。
- アプリケーションはコールバック URL から identity および access トークンを抽出します。
7.1.1.3. リソースオーナーパスワードクレデンシャルの付与 (直接アクセスグラント)
これは、管理コンソールで Direct Access Grants と呼ばれます。これは、ユーザーの代わりにトークンを取得する REST クライアントによって使用されます。HTTP POST リクエストには、ユーザーの認証情報とクライアントの ID (機密クライアントの場合) が含まれる HTTP POST リクエストがあります。ユーザーの認証情報は、フォームパラメーター内で送信されます。HTTP 応答には、identity、access、および refresh トークンが含まれます。
7.1.1.4. クライアント認証情報の付与
これは REST クライアントでも使用しますが、外部ユーザーの代わりに機能するトークンを取得する代わりに、クライアントに関連するサービスアカウントのメタデータおよびパーミッションに基づいてトークンが作成されます。例と詳細な情報は、「サービスアカウント」の章を参照してください。
7.1.2. Red Hat Single Sign-On Server OIDC URI エンドポイント
以下は、Red Hat Single Sign-On がパブリッシュする OIDC エンドポイントの一覧です。これらの URL は、Red Hat Single Sign-On 以外のクライアントアダプターを使用して、認証サーバーと OIDC と通信させる場合に便利です。これらはすべて相対 URL と HTTP(S) プロトコル、hostname、通常は /auth で始まるパスである URL のルートです (例: https://localhost:8080/auth)。
- /realms/{realm-name}/protocol/openid-connect/auth
- これは、Authorization Code Flow で一時的なコードを取得する URL エンドポイントです。または、Implicit Flow、Direct Grants、または Client Grants でトークンを取得する URL エンドポイントです。
- /realms/{realm-name}/protocol/openid-connect/token
- これは、一時コードをトークンに変換する Authorization Code Flow の URL エンドポイントです。
- /realms/{realm-name}/protocol/openid-connect/logout
- これは、ログアウトを実行するための URL エンドポイントです。
- /realms/{realm-name}/protocol/openid-connect/userinfo
- これは、OIDC 仕様で説明されている User Info サービスの URL エンドポイントです。
- /realms/{realm-name}/protocol/openid-connect/revoke
- これは、RFC7009 に記載されている OAuth 2.0 Token Revocation の URL エンドポイントです。
これらはすべて、 {realm-name} をレルムの名前に置き換えます。
7.2. SAML
SAML 2.0 は OIDC と同様の仕様ですが、より古く、より成熟したものです。SOAP と plethora の WS-* 仕様にはルートがあるため、OIDC よりも詳細度が少しなる傾向があります。SAML 2.0 は主に、認証サーバーとアプリケーション間の XML ドキュメント変更によって機能する認証プロトコルです。XML 署名と暗号化は、要求と応答の検証に使用されます。
SAML を使用する場合は、主に 2 つのタイプのユースケースがあります。1 つ目のアプリケーションは、Red Hat Single Sign-On サーバーがユーザーを認証するよう依頼するアプリケーションです。ログインが成功すると、アプリケーションには、ユーザーのさまざまな属性を指定する SAML アサーションが含まれる XML ドキュメントを受け取ります。XML ドキュメントはレルムによってデジタル署名され、アプリケーションでユーザーがアクセスできるリソースを判別するためにアプリケーションが使用できるアクセス情報 (ユーザーロールマッピングなど) が含まれます。
2 つ目のタイプのユースケースは、リモートサービスへのアクセスを取得するクライアントのものです。この場合、クライアントはユーザーの代わりに他のリモートサービスで起動するのに使用できる SAML アサーションを取得するよう Red Hat Single Sign-On に要求します。
7.2.1. SAML バインディング
SAML は、認証プロトコルの実行時に XML ドキュメントを交換するさまざまな方法を定義します。Redirect および Post のバインディングはブラウザーベースのアプリケーションに対応します。ECP バインディングは、REST 呼び出しに対応します。他のバインディングタイプがありますが、Red Hat Single Sign-On はこれら 3 つのみをサポートします。
7.2.1.1. リダイレクトバインディング
Redirect バインディングは一連のブラウザーリダイレクト URI を使用して情報を交換します。これは、その仕組みの概要です。
- ユーザーがアプリケーションにアクセスでき、アプリケーションによってユーザーが認証されないことが検索されます。これは XML 認証リクエストドキュメントを生成し、これを Red Hat Single Sign-On サーバーにリダイレクトするために使用される URI で query param としてエンコードします。設定によっては、アプリケーションはこの XML ドキュメントにデジタル署名し、この署名をリダイレクト URI の Red Hat Single Sign-On へのクエリーパラメーターとしても使用できます。この署名は、このリクエストを送信したクライアントの検証に使用されます。
- ブラウザーが Red Hat Single Sign-On にリダイレクトされます。サーバーは XML 認証要求のドキュメントを抽出し、必要に応じてデジタル署名を検証します。ユーザーは、認証されるクレデンシャルに入力する必要があります。
- 認証後、サーバーは XML 認証応答ドキュメントを生成します。このドキュメントには、名前、アドレス、電子メールなどのユーザーに関するメタデータを保持する SAML アサーションが含まれ、ユーザーが持つ可能性のあるロールマッピングが含まれます。このドキュメントはほぼ常に XML 署名を使用してデジタル署名されており、暗号化される可能性もあります。
- その後、XML 認証応答ドキュメントは、ブラウザーをアプリケーションに戻すリダイレクト URI でクエリーパラメーターとしてエンコードされます。デジタル署名は、クエリーパラメーターとしても含まれています。
- アプリケーションはリダイレクト URI を受け取り、XML ドキュメントを展開してレルムの署名を検証し、有効な認証応答を受信していることを確認します。その後、SAML アサーション内の情報を使用して、アクセスの決定やユーザーデータの表示に使用されます。
7.2.1.2. POST バインディング
SAML POST バインディングは、Redirect バインディングとほぼ同じように動作しますが、GET リクエストの代わりに XML ドキュメントは POST リクエストによって交換されます。POST バインディングは JavaScript を使用してブラウザーを漏洩し、ドキュメント交換時に Red Hat Single Sign-On サーバーまたはアプリケーションへの POST リクエストを行います。基本的には、HTTP 応答には、埋め込み JavaScript のある HTML 形式が含まれる HTML ドキュメントが含まれています。ページが読み込まれると、JavaScript は自動的にフォームを呼び出します。本当にこのお気に入りについて把握する必要はありませんが、これは非常に分かりやすくなります。
通常、POST バインディングはセキュリティーおよびサイズの制限により推奨されます。REDIRECT を使用する場合、SAML 応答は URL の一部となる (以前説明されるようにクエリーパラメーターですが) 、ログ内でキャプチャーされ、安全性は少なくなる可能性があります。サイズに関しては、アサーションが多くの属性または大きな属性を含んでいる場合、HTT Pペイロード内で文書を送信することは、より制限された URL 内よりも常に優れています。
7.2.1.3. ECP
ECP は「Enhanced Client or Proxy」、SAML v.2.0 プロファイルを表します。これにより、Web ブラウザーのコンテキスト外にある SAML 属性を交換できます。これは、REST または SOAP ベースのクライアントで最もよく使用されます。
7.2.2. Red Hat Single Sign-On Server SAML URI エンドポイント
Red Hat Single Sign-On には、すべての SAML 要求に対してエンドポイントは 1 つしかありません。
http(s)://authserver.host/auth/realms/{realm-name}/protocol/saml
すべてのバインディングはこのエンドポイントを使用します。
7.3. OpenID Connect 対SAML
OpenID Connect と SAML の選択は、古い成熟したプロトコル(SAML)の代わりに新しいプロトコル (OIDC) を使用する場合でも問題はありません。
多くの場合、Red Hat Single Sign-On では、OIDC の使用を推奨します。
SAML は OIDC よりも詳細な状態である傾向があります。
交換されたデータの詳細レベルを超えた場合、SAML は Web で機能するように OIDC が Web で機能するように設計されている仕様を比較すると、Web 上で動作するように調整されました。たとえば、OIDC は、SAML よりもクライアント側に簡単に実装できるため、HTML5/JavaScript アプリケーションにも適しています。トークンは JSON 形式であるため、JavaScript による使いやすさが簡単です。また、Web アプリケーションでセキュリティーを実装するためにより優れた機能もいくつかあります。たとえば、ユーザーがログインしたままかどうかを簡単に判断するために仕様で使用されている iframe における効果的な方法 を確認してください。
SAML がその使い方もあります。OIDC 仕様が進化したように、SAML で数年以上の機能を実装することがわかります。多くの場合は、成熟度が高いため、またそれらにはセキュリティーを確保した既存のアプリケーションがすでにあるため、SAML over OIDC を選択していることがよく見られます。
7.4. Docker Registry v2 認証
Docker 認証はデフォルトで無効になっています。有効にするには、「プロファイル」を参照してください。
Docker レジストリー V2 認証は、Docker レジストリーに対してユーザーを認証するために使用される OIDC-Like プロトコルです。Red Hat Single Sign-On のこのプロトコルにより、Docker クライアントによって使用される Red Hat Single Sign-On 認証サーバーに対してレジストリーに対して認証を行うことができます。このプロトコルはかなりの標準的なトークンと署名メカニズムを使用しますが、それが真の OIDC 実装として処理されないようにすることを防ぐ欠点があります。最高の相違には、要求および応答用に非常に具体的な JSON 形式が含まれており、リポジトリー名とパーミッションを OAuth スコープメカニズムにマッピングする方法を理解することができます。
7.4.1. Docker 認証フロー
Docker API ドキュメントの概要は、このプロセスについて説明していますが、Red Hat Single Sign-On 認証サーバーの視点では、簡単な概要が提供されます。
このフローは、docker login
コマンドがすでに実行されていることを前提としています。
- このフローは、Docker クライアントが Docker レジストリーからリソースを要求すると開始します。リソースが保護され、要求に認証トークンがない場合、Docker レジストリーサーバーは 401 と必要なパーミッションと認可サーバーの一部の情報でクライアントに応答します。
-
Docker クライアントは Docker レジストリーからの 401 応答に基づいて認証要求を作成します。その後、クライアントは Red Hat Single Sign-On 認証サーバーへの HTTP Basic Authentication 要求の一部として、ローカルでキャッシュされた認証情報 (
docker login
コマンドから) を使用します。 - Red Hat Single Sign-On 認証サーバーは、ユーザーの認証を試みます。また、OAuth スタイルの Bearer トークンが含まれる JSON ボディーを返します。
- Docker クライアントは JSON 応答からベアラートークンを取得し、これを Authorization ヘッダーで使用し、保護されているリソースを要求します。
- Docker レジストリーが Red Hat Single Sign-On サーバーから、保護されたリソースの新規リクエストを受信すると、レジストリーはトークンを検証し、要求されたリソースへのアクセスを許可します (必要に応じて)。
Docker プロトコルを使用した認証に成功したら、Red Hat Single Sign-On 側でユーザーセッションは作成されません。ブラウザーの SSO セッションの場合、Docker プロトコルは使用されず、トークンを更新する方法がないため、特定のトークン/セッションがまだ有効であれば Red Hat Single Sign-On サーバーに尋ねる方法はありません。したがって、このプロトコルではセッションの作成は必要ではありません。詳細は「一時的なセッション」を参照してください。
7.4.2. Red Hat Single Sign-On Docker Registry v2 Authentication Server URI Endpoints
Red Hat Single Sign-On には、すべての Docker auth v2 要求に対してエンドポイントは 1 つしかありません。
http(s)://authserver.host/auth/realms/{realm-name}/protocol/docker-v2
第8章 クライアントの管理
クライアントは、ユーザーの認証を要求できるエンティティーです。クライアントは 2 つの形式で提供されます。クライアントの最初のタイプは、single-sign-on に参加するアプリケーションです。これらのクライアントは、Red Hat Single Sign-On によるセキュリティーの提供のみを行います。他のタイプのクライアントは、認証されたユーザーの代わりに他のサービスを呼び出すことができるように、アクセストークンを要求するものです。このセクションでは、クライアントの設定に関するさまざまな側面と、その方法について説明します。
8.1. OIDC クライアント
アプリケーションのセキュリティーを保護するために OpenID Connect が推奨されるプロトコルです。ギャラウンドから Web フレンドリーになり、HTML5/JavaScript のアプリケーションで最適となるように設計されました。
OIDC クライアントを作成するには、左メニュー項目 Clients
に移動します。このページでは、右側に Create
ボタンが表示されます。
Clients
これにより、Add Client
ページが表示されます。
クライアントの追加
クライアントの クライアント ID
を入力します。これは、リクエストで使用する単純な英数字の文字列で、Red Hat Single Sign-On データベースにおいてクライアントを特定します。次に、Client Protocol
ドロップダウンメニューで openid-connect
を選択します。最後に、Root URL
フィールドにアプリケーションのベース URL を入力し、Save
をクリックします。これでクライアントが作成され、クライアント Settings
タブが表示されます。
クライアントの設定
このページの設定アイテムを追って説明します。
クライアント ID
これは、OIDC 要求のクライアント識別子として使用される英数字の文字列を指定します。
名前
これは、Red Hat Single Sign-On UI 画面に表示されるたびに、クライアントの表示名です。代替文字列の値 (例: ${myapp}) を設定して、このフィールドの値をローカライズできます。詳細は、『サーバー開発者ガイド』を参照してください。
説明
これはクライアントの説明を指定します。これはローカライズすることもできます。
有効
これがオフになると、クライアントは認証を要求することができません。
Consent Required
これがオンの場合、ユーザーにはそのアプリケーションへのアクセス権限を付与するかどうかをユーザーに尋ねるメッセージが表示されます。また、クライアントがアクセスする情報を正確に認識できるように、クライアントの対象となるメタデータも表示します。Google へのソーシャルログインを行った場合には、多くの場合、同様のページが表示されます。Red Hat Single Sign-On は同じ機能を提供します。
アクセスタイプ
これは OIDC クライアントのタイプを定義します。
- confidential
- 機密性の高いアクセスタイプは、ブラウザーログインを実行し、アクセスコードをアクセストークンに変換する際にクライアントシークレットを必要とするサーバー側のクライアントタイプです (詳細は、OAuth 2.0 仕様の「Access Token Request」を参照してください)。このタイプはサーバー側のアプリケーションに使用する必要があります。
- public
- パブリックアクセスタイプは、ブラウザーログインの実行に必要なクライアント側のクライアント向けです。クライアント側のアプリケーションの場合、シークレットを安全に維持することはできません。代わりに、クライアントの正しいリダイレクト URI を設定してアクセスを制限することが非常に重要です。
- bearer-only
- ベアラーのみのアクセスタイプは、アプリケーションがベアラートークン要求のみを許可することを意味します。これがオンの場合、このアプリケーションはブラウザーログインに参加できません。
Standard Flow Enabled
これが置かれている場合、クライアントは OIDC 認証コードフローを使用できます。
Implicit Flow Enabled
これがオンの場合、クライアントは OIDC Implicit Flow を使用できます。
Direct Access Grants Enabled
これが置かれている場合、クライアントは OIDC Direct Access Grants を使用することができます。
Root URL
Red Hat Single Sign-On で設定された相対 URL が使用される場合、この値はそれらの先頭に追加されます。
Valid Redirect URIs
これは必須フィールドです。URL パターンに入力し、+ 記号をクリックして追加します。削除する URL の横にある - 記号をクリックします。Save
ボタンをクリックする必要があることに注意してください。ワイルドカード (*) は URI の最後にのみ許可されます (例: http://host.com/*)。
有効なリダイレクト URI パターンを登録する場合には、追加の注意を払う必要があります。一般的に使用すると、攻撃を受けやすくなります。詳細は、「Threat Model Mitigation」の章を参照してください。
Base URL
Red Hat Single Sign-On がクライアントへのリンクが必要な場合は、この URL が使用されます。
Admin URL
Red Hat Single Sign-On 固有のクライアントアダプターでは、これはクライアントのコールバックエンドポイントになります。Red Hat Single Sign-On サーバーは、この URI を使用して、失効ポリシーのプッシュ、バックチャネルログアウトなどのコールバックを行います。Red Hat Single Sign-On サーブレットアダプターでは、サーブレットアプリケーションのルート URL を使用できます。詳細は、『アプリケーションおよびサービスガイド』を参照してください。
Web Origins
このオプションは、Cross-Origin Resource Sharing で構成される CORS を中心とします。ブラウザー JavaScript が、ドメインが JavaScript コードのいずれかとは異なるサーバーに AJAX HTTP リクエストを作成しようとする場合、リクエストは CORS を使用する必要があります。サーバーは特別な方法で CORS リクエストを処理する必要があります。処理しないと、ブラウザーは表示されず、リクエストの処理を許可しません。このプロトコルは、XSS、CSRF、およびその他の JavaScript ベースの攻撃を保護するために存在します。
Red Hat Single Sign-On は、検証された CORS リクエストをサポートします。これは、クライアントの Web Origins
設定に一覧表示されるドメインがクライアントアプリケーションに送信されるアクセストークン内に組み込まれる仕組みになります。その後、クライアントアプリケーションはこの情報を使用して、CORS リクエストの呼び出しを許可するかどうかを決定します。これは OIDC プロトコルへの拡張であるため、Red Hat Single Sign-On クライアントアダプターのみがこの機能をサポートします。詳細は、『アプリケーションおよびサービスガイド』を参照してください。
Web Origins
データを入力するには、ベース URL を入力し、+ 記号をクリックして追加します。削除する URL の横にある - 記号をクリックします。Save
ボタンをクリックする必要があることに注意してください。
8.1.1. 詳細設定
OAuth 2.0 Mutual TLS Certificate Bound Access Tokens Enabled
相互 TLS は、TLS ハンドシェイク時に交換されるクライアント証明書でアクセストークンおよび更新トークンをバインドします。これにより、これらのトークンを盗む方法を見つけた攻撃者がトークンを取得することができなくなります。この種類のトークンは holder-of-key トークンと呼ばれます。ベアラートークンとは異なり、holder-of-key トークンの受信側は、トークンの送信側が正当であるかどうかを検証できます。
トークンリクエストで以下の条件が満たされると、Red Hat Single Sign-On はアクセストークンをバインドし、クライアント証明書で更新トークンを取得し、それらを holder-of-key トークンとして発行します。すべての条件が満たされないと、Red Hat Single Sign-On はトークンリクエストを拒否します。
- この機能はオンになっています。
- トークンリクエストが、認可コードフローまたはハイブリッドフローのトークンエンドポイントに送信されます。
- TLS ハンドシェイクでは、Red Hat Single Sign-On がクライアント証明書を要求し、クライアントがクライアント証明書を送信します。
- TLS ハンドシェイクで Red Hat Single Sign-On がクライアント証明書を正常に検証しました。
Red Hat Single Sign-On で相互 TLS を有効にするには、「WildFly で相互 SSL の有効化」を参照してください。
以下の場合には、Red Hat Single Sign-On はアクセストークンまたは更新トークンを送信するクライアントを検証します。検証に失敗すると、Red Hat Single Sign-On はトークンを拒否します。
- トークンの更新リクエストは、holder-of-key 更新トークンでトークンエンドポイントに送信されます。
- UserInfo リクエストは、holder-of-key アクセストークンで UserInfo エンドポイントに送信されます。
- ログアウトリクエストは、holder-of-key 更新トークンで Logout エンドポイントに送信されます。
詳細は、OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens の「Mutual TLS Client Certificate Bound Access Tokens」を参照してください。
keycloak クライアントアダプターのいずれも、現在 holder-of-key トークン検証をサポートします。代わりに、keycloak アダプターは現在アクセスおよび更新トークンをベアラートークンとして扱います。
Proof Key for Code Exchange (PKCE)
攻撃者が正当なクライアントに発行した認可コードを盗むと、PKCE は攻撃者がそのコードに適用されるトークンを受信するのを防ぎます。
管理者は以下の 3 つのオプションを選択できます。
Proof Key for Code Exchange Code Challenge Method
- (blank): クライアントが PKCE のパラメーターを Red Hat Single Sign-On の承認エンドポイントに正しく送信しない限り、Red Hat Single Sign-On は PKCE を適用しません。これはデフォルトの設定です。
- S256: Red Hat Single Sign-On は、コードのチャレンジメソッドが S256 であるクライアント PKCE に適用されます。
- plain: Red Hat Single Sign-On は、コードのチャレンジメソッドが plain のクライアント PKCE に適用されます。
詳細は、OAuth パブリッククライアントによるコード Exchange の RFC 7636 Proof キー を参照してください。
Signed and Encrypted ID Token Support
Red Hat Single Sign-On は、Json Web Encryption (JWE) 仕様に従って ID トークンを暗号化できます。管理者は、クライアントごとに ID トークンの暗号化を行うかどうかを決定できます。この機能は、デフォルトでは無効になっています。
ID トークンを暗号化するキーは、コンテンツ暗号化キー (CEK) と呼ばれます。Red Hat Single Sign-On およびクライアントは、どの CEK が使用されるかと、その配信方法をネゴシエートする必要があります。これを行うには Key Management Mode と呼ばれます。
JWE 仕様は、キー管理モード の 5 種類のキー管理モードを決定します。Red Hat Single Sign-On は、その中における鍵暗号化をサポートします。
Key Encryption では、クライアントは非対称暗号のペアを生成します。公開鍵は CEK の暗号化に使用されます。Red Hat Single Sign-On は、ID トークンごとに CEK を生成し、この生成された CEK で ID トークンを暗号化し、このクライアントの公開鍵でこの CEK を暗号化します。クライアントはこの暗号化された CEK を秘密鍵で復号化し、CEK を復号化して ID トークンを復号化します。そのため、クライアント以外のユーザーは ID トークンを復号化できません。
クライアントは、CEK を Red Hat Single Sign-On で暗号化するために公開鍵を渡す必要があります。Red Hat Single Sign-On は、クライアントが提供する URL からの公開鍵のダウンロードをサポートします。クライアントは、Json Web Keys (JWK) 仕様に従って公開鍵を提供する必要があります。これを実行する方法は、「Confidential Client Credentials」の「Signed JWT
」で定義します。詳細な手順は以下のとおりです。
-
クライアントの
Credentials
タブを開きます。 -
Client Authenticator
プルダウンメニューからSigned Jwt
を選択します。 -
ON を
JWKS URL
スイッチに設定 -
JWKS URL
テキストボックスに URL を提供するクライアントの公開鍵を入力します。
キー暗号化のアルゴリズムは、Json Web Algorithm (JWA) 仕様で定義されています。Red Hat Single Sign-On は、デフォルトパラメーター (RSA-OAEP) を使用して RSAES-PKCS1-v1_5 (RSA1_5) および RSAES OAEP をサポートします。このアルゴリズムを選択する詳細な手順は以下のとおりです。
-
クライアントの
Settings
タブを開きます。 -
詳細設定の表示
を開きます。 -
ID Token Encryption Key Management Algorithm
プルダウンメニューからRSA1_5
またはRSA-OAEP
を選択します。
CEK による ID トークン暗号化アルゴリズムは、JWA 仕様にも定義されます。Red Hat Single Sign-On は、128 ビットキー (A128GCM) を使用した AES_128_CBC_HMAC_SHA_256 認証暗号化 (A128CBC-HS256) および AES GCM に対応しています。このアルゴリズムを選択する詳細な手順は以下のとおりです。
-
クライアントの
Settings
タブを開きます。 -
詳細設定の表示
を開きます。 -
ID Token Encryption Content Encryption Algorithm
プルダウンメニューからA128CBC-HS256
またはA128GCM
を選択します。
8.1.2. 機密クライアント認証情報
クライアントの Settings
タブでクライアントの access type を confidential
に設定した場合は、新しい Credentials
タブが表示されます。このようなクライアントの処理の一環として、クライアントのクレデンシャルを設定する必要があります。
認証情報タブ
Client Authenticator
リストボックスは、機密クライアントに使用する認証情報のタイプを指定します。デフォルトはクライアント ID およびシークレットになります。シークレットは自動的に生成され、Regenerate Secret
ボタンを使用すると、必要に応じてこのシークレットを再作成します。
または、シークレットではなく、署名済みの Json Web Token (JWT) または x509 証明書の検証 (別名 Mutual TLS) を使用することができます。
署名付き JWT
この認証情報タイプを選択すると、クライアントの秘密鍵と証明書も生成する必要があります。秘密鍵は JWT に署名するために使用されます。一方、証明書は、署名の検証にサーバーによって使用されます。Generate new keys and certificate
ボタンをクリックして、このプロセスを開始します。
キーの生成
これらのキーを生成すると、Red Hat Single Sign-On は証明書を保存し、クライアントが使用する秘密鍵と証明書をダウンロードする必要があります。必要なアーカイブ形式を選択し、秘密鍵とストアのパスワードを指定します。
外部ツールを使用してこれらを生成したり、クライアントの証明書をインポートするだけです。
証明書のインポート
インポートできる形式は複数あります。証明書を保存するアーカイブ形式を選択し、ファイルを選択してから Import
ボタンをクリックします。
最後に、JWKS URL の使用
を選択している場合は、証明書をインポートする必要はありません。このような場合には、クライアントが JWK 形式で公開鍵を公開する URL を指定できます。Red Hat Single Sign-On 側では、クライアントがキーを変更すると、Red Hat Single Sign-On 側ですべてのキーを再インポートする必要がないため、柔軟性があります。
Red Hat Single Sign-On アダプターで保護されたクライアントを使用している場合は、https://myhost.com/myapp がクライアントアプリケーションのルート URL であると仮定して、https://myhost.com/myapp/k_jwks のように JWKS の URL を設定することができます。詳細は『サーバー開発者ガイド』を参照してください。
パフォーマンス上、Red Hat Single Sign-On は OIDC クライアントの公開鍵をキャッシュします。クライアントの秘密鍵が危険にさらされたと思われる場合は、キーの更新は明らかですが、キーの更新も適切です。詳細は、「キャッシュの消去」セクションを参照してください。
クライアントシークレットでの署名済み JWT
Client Authenticator
リストボックスでこのオプションを選択すると、秘密鍵の代わりに、クライアントシークレットで JWT が署名した JWT を使用できます。
このクライアントシークレットは、クライアントによって JWT に署名するために使用されます。
X509 証明書
このオプションを有効にすると、クライアントが TLS Handshake 時に適切な X509 証明書を使用する場合に Red Hat Single Sign-On を検証します。
このオプションには、Red Hat Single Sign-On での相互 TLS が必要です。『WildFly での相互 SSL の有効化』を参照してください。
X509 証明書
バリデーターは、証明書の Subject DN フィールドも、regexp 検証式を設定して確認します。いくつかのユースケースでは、すべての証明書を受け入れるだけで十分です。この場合は、(.*?)(?:$)
式を使用できます。
Red Hat Single Sign-On がリクエストからクライアント ID を取得する方法は 2 つあります。最初のオプションはクエリーの client_id
パラメーターです (OAuth 2.0 仕様 のセクション 2.2 で説明されています)。2 つ目の方法として、client_id
をフォームパラメーターとして指定します。
8.1.3. サービスアカウント
各 OIDC クライアントには、アクセストークンの取得を可能にする組み込み service account があります。これは、「クライアント認証情報の付与」の OAuth 2.0 仕様で説明されています。この機能を使用するには、クライアントの Access Type を confidential
に設定する必要があります。これを実行すると、Service Accounts Enabled
スイッチが表示されます。このスイッチをオンにする必要があります。また、クライアントのクレデンシャルを設定されていることを確認してください。
このクライアントを使用するには、有効な confidential
Client を登録する必要があります。また、このクライアントでは、Red Hat Single Sign-On 管理コンソールでスイッチ Service Accounts Enabled
を確認する必要があります。Service Account Roles
タブは、このクライアントの代わりに取得したサービスアカウントで利用可能なロールを設定できます。Full Scope Allowed
が許可されていない限り、このクライアントのロールスコープマッピング (Scope
タブで利用可能なロールを持っている必要があることを覚えておいてください。通常のログインでは、アクセストークンからのロールは以下の交差部分になります。
- 特定のクライアントのロールスコープと、リンクされたクライアントスコープから継承されたロールスコープのマッピング
- サービスアカウントロール
呼び出す REST URL は /auth/realms/{realm-name}/protocol/openid-connect/token
です。この URL の呼び出しは POST リクエストで、クライアントクレデンシャルを投稿する必要があります。デフォルトでは、クライアント認証情報は Authorization: Basic
ヘッダーでクライアントの clientId および clientSecret によって表されますが、署名付きの JWT アサーションやその他のクライアント認証用のカスタムメカニズムを使ってクライアントを認証することもできます。OAuth2 仕様に従って、grant_type=client_credentials
パラメーターを使用する必要があります。
たとえば、サービスアカウントを取得する POST 呼び出しは以下のようになります。
POST /auth/realms/demo/protocol/openid-connect/token Authorization: Basic cHJvZHVjdC1zYS1jbGllbnQ6cGFzc3dvcmQ= Content-Type: application/x-www-form-urlencoded grant_type=client_credentials
応答は、OAuth 2.0 仕様の標準の JSON ドキュメントです。
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache { "access_token":"2YotnFZFEjr1zCsicMWpAA", "token_type":"bearer", "expires_in":60 }
デフォルトでは、アクセストークンのみが返されます。更新トークンが返されず、認証の成功時に Red Hat Single Sign-On 側でユーザーセッションも作成されません。更新トークンがないため、アクセストークンの期限が切れると再認証が必要ですが、セッションはデフォルトで作成されないため、Red Hat Single Sign-On サーバー側で追加のオーバーヘッドは保証されません。
このような状況では、ログアウトは必要ありません。ただし、発行されたアクセストークンは、「OpenID Connect Endpoints」セクションで説明するように、OAuth2 Revocation Endpoint にリクエストを送信して取り消すことができます。
8.1.4. オーディエンス語のサポート
Red Hat Single Sign-On がデプロイされる典型的な環境は、一般的に、認証に Red Hat Single Sign-On を使用する 秘密 または 公開 クライアントアプリケーション (フロントエンドクライアントアプリケーション) のセットで構成されています。
また、フロントエンドクライアントアプリケーションからの要求に対応し、リソースを提供する サービス (OAuth 2 仕様では Resource Servers と呼ばれる) もあります。これらのサービスは通常、特定のリクエストに対して認証を行うために、アクセストークン (Bearer トークン) を送信する必要があります。このトークンは、Red Hat Single Sign-On へのログインを試みる際に、フロントエンドアプリケーションによって取得されていました。
サービス間の信頼が低い環境では、以下のシナリオが発生する可能性があります。
-
my-app
という名前のフロントエンドクライアントは、Red Hat Single Sign-On に対して認証される必要があります。 -
ユーザーが Red Hat Single Sign-On で認証されています。Red Hat Single Sign-On は、
my-app
アプリケーションにトークンを発行しました。 -
アプリケーション
my-app
は、トークンを使用してサービスevil-service
を呼び出しました。このサービスは、非常に有用なデータを提供できるので、このアプリケーションはevil-service
を呼び出す必要があります。 -
evil-service
アプリケーションは、my-app
に応答を返しました。ただし、同時に、以前に送信されたトークンが保持されていました。 -
次に、
evil-service
は、以前に保持したトークンで、good-service
と呼ばれる別のサービスを呼び出していました。呼び出しに成功し、good-service
がデータを返しました。悪意のあるサービス
がトークンを悪用してクライアントmy-app
に代わって他のサービスにアクセスするため、セキュリティーが損なわれます。
このフローは、サービス間の信頼レベルの高い環境においては問題になる可能性があります。ただし、サービス間の信頼が低くなる他の環境では、この問題が発生する可能性があります。
いくつかの環境では、要求されたデータを元の呼び出し元 (my-appクライアント) に適切に返すためにevil-service
が good-service
から追加データを取得する必要がある場合があるため、このワークフロー例は要求された動作である場合もあります。Kerberos 認証情報の委譲と同様の意味があります。Kerberos 認証情報の委譲と同様に、無制限のオーディエンスは、サービス間で高レベルに存在する場合にのみ役立つので、十分に大きなオーディエンスになります。それ以外の場合は、以下で説明されているようにオーディエンスを制限することが推奨されます。対象を制限できます。同時に、evil-service
が good-service
から必要なデータを取得できるようにします。この場合、evil-service
および good-service
の両方が対象としてトークンに追加されることを確認する必要があります。
上記の例にあるように、アクセストークンが誤用しないようにするため、トークンでオーディエンスを制限し、トークンに関するオーディエンスを検証するようにサービスを設定することを推奨します。これが実行されると、以下のように上のフローが変更されます。
-
my-app
という名前のフロントエンドクライアントは、Red Hat Single Sign-On に対して認証される必要があります。 -
ユーザーが Red Hat Single Sign-On で認証されています。Red Hat Single Sign-On は、
my-app
アプリケーションにトークンを発行しました。クライアントアプリケーションは、evil-service
サービスを呼び出す必要があることをすでに認識しているため、Red Hat Single Sign-Onサーバーに送信される認証リクエストでscope=evil-service
を使用しました。scope パラメーターの詳細は、「Client Scopes section」を参照してください。my-app
クライアントに発行されたトークンには、"audience": [ "evil-service" ]
のようにオーディエンスが含まれています。このアクセストークンは、クライアントがこのアクセストークンを使用してevil-service
サービスを呼び出すことを望んでいることを宣言しています。 -
evil-service
アプリケーションは、my-app
にリクエストを提供していました。同時に、そのトークンに送信したトークンを保持します。 -
その後、以前に保持したトークンを使用して
good-service
を呼び出したevil-service
アプリケーションが起動しました。good-service
はトークンのオーディエンスをチェックし、オーディエンスはevil-service
のみであることを確認しているため、呼び出しは成功しませんでした。これは想定内の動作であり、セキュリティーが破損していません。
クライアントが後で good-service
を呼び出す場合は、scope=good-service
で SSO ログインを発行し、別のトークンを取得する必要があります。返されるトークンには、対象として good-service
が含まれます。
"audience": [ "good-service" ]
さらに、good-service
を呼び出すことができます。
8.1.4.1. setup
オーディエンスのチェックを適切に設定するには、以下を実行します。
- アダプター構成に verify-token-audience フラグを追加して、サービスが送信されたアクセストークンのオーディエンスを確認するように構成されていることを確認します。詳細は「アダプターの設定」を参照してください。
- アクセストークンが Red Hat Single Sign-On により発行される際に、要求されたオーディエンスがすべて含まれ、不要なオーディエンスが含まれていないことを確認します。この対象は、次のセクション で説明されているようにクライアントロールによって自動的に追加することも、以下 のようにハードコーディングすることもできます。
8.1.4.2. オーディエンスの自動追加
デフォルトのクライアントスコープ ロール には 、Audience Resolve プロトコルマッパーが定義されています。このプロトコルマッパーは、現在のトークンが利用可能なクライアントロール 1 つ以上があるクライアントをすべてチェックします。その後、それらの各クライアントのクライアント ID が自動的にオーディエンスとして追加されます。これは、サービス (通常はベアラーのみ) クライアントがクライアントのロールに依存する場合に便利です。
たとえば、Bearer 専用のクライアント good-service
と、機密クライアント my-app
があり、そのクライアントを認証し、my-app
に発行されたアクセストークンを使用して good-service
の REST サービスを呼び出したいとします。true の場合:
-
good-service
クライアントには、クライアントロール自体で定義されているクライアントロールがあります - ターゲットユーザーには、少なくとも 1 つのクライアントロールが割り当てられています
-
my-app
クライアントには、割り当てられたロールのロールスコープのマッピングがあります。
次に、good-service
は、my-app
に発行されたアクセストークンに対して自動的にオーディエンスとして追加されます。
オーディエンスが自動的に追加されないようにする必要がある場合は、ロールスコープマッピングを my-app
クライアントに直接設定しないでください。代わりに、good-service
など、専用のクライアントスコープ作成します。これには、good-service
クライアントのクライアントロールのロールスコープのマッピングが含まれます。このクライアントスコープが任意のクライアントスコープとして my-app
クライアントに追加されると仮定すると、client ロールとオーディエンスが、scope=good-service
パラメーターで明示的に要求されている場合に限り、クライアントロールとオーディエンスがトークンに追加されます。
フロントエンドクライアント自体は、アクセストークンの対象に自動的に追加されます。アクセストークンにはトークンがオーディエンスとして発行されたクライアントが含まれていないため、アクセストークンと ID トークン間で簡単に区別できます。上記の例では、my-app
はオーディエンスとして追加されません。クライアント自体をオーディエンスとして必要な場合は、ハードコーディングされたオーディエンスオプションを参照してください。ただし、フロントエンドと REST サービスと同じクライアントを使用することは推奨されていません。
8.1.4.3. ハードコードされたオーディエンス
サービスがレルムロールに依存する場合や、トークンのロールに依存しない場合は、ハードコーディングされたオーディエンスを使用すると便利です。これはプロトコルマッパーで、指定されたサービスクライアントのクライアント ID をトークンに追加します。クライアント ID とは異なる対象が必要な場合は、一部の URL などのカスタム値を使用することもできます。
プロトコルマッパーはフロントエンドクライアントに直接追加できますが、オーディエンスは常に追加されます。より粒度の細かい制御が必要な場合は、専用のクライアントスコープでプロトコルマッパーを作成することができます。これは、good-service
などで呼び出されます。
オーディエンスプロトコルマッパー
-
good-service
クライアントの インストールタブ から、アダプタの構成を生成し、verify-token-audience オプションが true に設定されていることを確認することができます。これは、この生成された設定を使用する場合にアダプターがオーディエンスを確認する必要があることを示します。 -
最後に、
my-app
フロントエンドクライアントがトークン内の対象として適切なサービス
を要求できるようにする必要があります。my-app
クライアントで、Client Scopes タブをクリックします。次に、good-service
をオプション (またはデフォルト) クライアント範囲として割り当てます。詳細は、「クライアントスコープのリンク」セクションを参照してください。 -
必要に応じて、クライアントスコープを評価 し、サンプルアクセストークンを生成することができます。その場合、任意のクライアントスコープとして指定した場合、
good-service
が scope パラメーターに含まれている場合に限り、生成されたアクセストークンの対象者にgood-service
が追加されることに注意してください。 -
my-app
アプリケーションでは、good-service
にアクセスするためのトークンを発行する際に、scope パラメーターをgood-service
の値と共に使用することを確認する必要があります。アプリケーションがサーブレットアダプターを使用している場合は、「パラメーター転送セクション」を参照してください。また、アプリケーションが JavaScript アダプターを使用している場合は、「JavaScript アダプターセクション」を参照してください。
トークンの正しい対象およびロールが分からない場合は、管理コンソールで クライアントスコープを評価 し、テストを行うとよいでしょう。
Audience および Audience Resolve プロトコルマッパーの両方はデフォルトで、対象をアクセストークンに追加します。ID トークンには通常、トークンが発行されたクライアントのクライアント ID である単一のオーディエンスのみが含まれます。これは、OpenID Connect 仕様の要件です。一方、アクセストークンには、オーディエンスマッパーが追加されない限り、発行されたトークンであるクライアントのクライアント ID があるとは限りません。
8.2. SAML クライアント
Red Hat Single Sign-On は、登録したアプリケーションの SAML 2.0 をサポートします。POST およびリダイレクトバインディングの両方がサポートされます。クライアント署名の検証を必要とし、サーバーの署名や応答の暗号化も選択できます。
SAML クライアントを作成するには、左メニュー項目の Clients
に移動します。このページでは、右側に Create
ボタンが表示されます。
Clients
これにより、Add Client
ページが表示されます。
クライアントの追加
クライアントの クライアント ID
を入力します。これは通常 URL であり、アプリケーションによって送信される SAML リクエストの issuer
値になります。Client Protocol
ドロップダウンボックスで次の saml
を選択します。最後に、クライアント SAML エンドポイント
URL を入力します。Red Hat Single Sign-On サーバーが SAML 要求および制限を送信する URL を入力します。通常、アプリケーションには SAML 要求を処理するための URL は 1 つだけあります。バインディングに異なる URL がある場合は、クライアントの Settings
タブでこれを修正できます。Save
をクリックします。これでクライアントが作成され、クライアント Settings
タブが表示されます。
クライアントの設定
- クライアント ID
- この値は、AuthNRequests で送信される発行者の値と一致する必要があります。Red Hat Single Sign-On は、Authn SAML 要求から発行者をプルし、この値によってクライアントに一致します。
- 名前
- これは、Red Hat Single Sign-On UI 画面に表示されるたびに、クライアントの表示名です。代替文字列の値 (例: ${myapp}) を設定して、このフィールドの値をローカライズできます。詳細は、『サーバー開発者ガイド』を参照してください。
- 説明
- これはクライアントの説明を指定します。これはローカライズすることもできます。
- 有効
- これがオフになると、クライアントは認証を要求することができません。
- Consent Required
- これがオンの場合、ユーザーにはそのアプリケーションへのアクセス権限を付与するかどうかをユーザーに尋ねるメッセージが表示されます。また、クライアントがアクセスする情報を正確に認識できるように、クライアントの対象となるメタデータも表示します。Google へのソーシャルログインを行った場合には、多くの場合、同様のページが表示されます。Red Hat Single Sign-On は同じ機能を提供します。
- AuthnStatement の追加
-
SAML ログイン応答は、使用される認証方法 (パスワードなど) と、ログインのタイムスタンプおよびセッションの有効期限を指定できます。これはデフォルトでは有効になっており、
AuthStatement
要素がログイン応答に含まれることを意味します。これを off に設定すると、クライアントが最大セッションの最大長さを判断できなくなります。そのため、クライアントセッションの期限が切れなくなる可能性があることに注意してください。 - サインインドキュメント
- Red Hat Single Sign-On を有効にすると、レルムの秘密鍵を使用してドキュメントに署名されます。
- REDIRECT 署名キー検索の最適化
-
オンになると、SAML プロトコルメッセージには、署名キー ID を使用したヒントが含まれる Red Hat Single Sign-On ネイティブエクステンションが含まれます。SP はこの拡張を認識すると、既知のキーで署名を検証しようとする代わりに、署名の検証に使用できます。このオプションは、署名がクエリーパラメーターで転送される REDIRECT バインディングのみに適用されます (キー ID は常にドキュメント署名に含まれる POST バインディングメッセージ に類似しています)。現在、IDP と SP の両方が Red Hat Single Sign-On サーバーおよびアダプターによって提供される状況に関連します。このオプションは、
Sign Documents
がオンの場合にのみ関連します。 - アサーションへの署名
-
Sign Documents
は、ドキュメント全体に署名します。この設定では、アサーションも SAML XML 認証応答内に署名され、組み込まれます。 - 署名アルゴリズム
- SAML ドキュメントの署名には、さまざまなアルゴリズムを選択します。
- SAML 署名キー名
-
署名付き SAML ドキュメントには、POST バインディング経由で送信される署名済みのほか、
KeyName
要素の署名キーの識別が含まれます。これには、Red Hat Single Sign-On のキー ID が含まれます。ただし、さまざまなベンダーが異なるキー名があるか、キー名が全くない場合もあります。このスイッチは、KeyName
に鍵 ID (KEY_ID
オプション) が含まれるか、レルムキーに対応する証明書のサブジェクト (CERT_SUBJECT
オプション (Microsoft Active Directory Federation Services に必要なもの) など)、または SAML メッセージからキー名のヒントが完全に省略される (NONE
オプション) かどうかを制御します。 - 正規化メソッド
- XML 署名の正規化メソッド。
- アサーションの暗号化
- レルムの秘密鍵を使用して、SAML ドキュメントのアサーションを暗号化します。AES アルゴリズムはキーサイズは 128 ビットで使用されます。
- クライアント署名が必要です
-
クライアントから送られるドキュメントが署名されるはずです。Red Hat Single Sign-On は、クライアントパブリックキーまたは
SAML Keys
タブで証明書を使ってこの署名を検証します。 - POST バインディングの強制
- デフォルトでは、Red Hat Single Sign-On は元のリクエストの最初の SAML バインディングを使用して応答します。このスイッチを有効にすると、元の要求がリダイレクトバインディングであっても、Red Hat Single Sign-On が常に SAML POST バインディングを使用して応答するように強制されます。
- フロントチャンネルのログアウト
- true の場合、このアプリケーションではログアウトを実行するためにブラウザーリダイレクトが必要になります。たとえば、アプリケーションでは Cookie をリセットする必要がありますが、リダイレクトでのみ実行可能です。このスイッチが false の場合、Red Hat Single Sign-On はバックグラウンド SAML 要求を呼び出してアプリケーションからログアウトします。
- 名前 ID フォーマットの強制
- 要求に名前 ID ポリシーがある場合は無視し、管理コンソールで設定された値を Name ID Format で使用されます。
- 名前 ID 形式
- サブジェクトの名前 ID 形式。リクエストに名前 ID ポリシーが指定されていない場合や、強制名 ID Format 属性が true の場合、この値が使用されます。各形式に使用されるプロパティーは次のとおりです。
- Root URL
- Red Hat Single Sign-On で設定された相対 URL が使用される場合、この値はそれらの先頭に追加されます。
- Valid Redirect URIs
-
これはオプションのフィールドです。URL パターンに入力し、+ 記号をクリックして追加します。削除する URL の横にある - 記号をクリックします。
Save
ボタンをクリックする必要があることに注意してください。ワイルドカード (*) は URI の最後にのみ許可されます (例: http://host.com/*)。このフィールドは、正確な SAML エンドポイントが登録されておらず、Red Hat Single Sign-On がリクエストから Assertion Consumer URL をプルする場合に使用されます。 - Base URL
- Red Hat Single Sign-On をクライアントにリンクする必要がある場合は、この URL が使用されます。
- マスター SAML 処理 URL
- この URL はすべての SAML リクエストに使用され、応答は SP に転送されます。これは、Assertion Consumer Service URL および Single Logout Service URL として使用されます。ログインリクエストに Assertion Consumer Service URL を含めますが、この URL は登録された Valid Redirect URI パターンによって検証される必要があります。
- assertion Consumer Service POST バインディング URL
- Assertion Consumer Service の POST バインディング URL。
- assertion Consumer Service リダイレクトバインディング URL
- Assertion Consumer Service のリダイレクトバインディング URL。
- サービス POST バインディングのログアウト URL
- Logout Service の POST バインディング URL。
- サービスリダイレクトバインディング URL をログアウトする
- Logout Service のリダイレクトバインディング URL。
8.2.1. IDP Initiated ログイン
IDP Initiated Login は、特定のアプリケーション/クライアントにログインする Red Hat Single Sign-On サーバーでエンドポイントを設定することができる機能です。クライアントの Settings
タブで、IDP Initiated SSO URL Name
を指定する必要があります。これは、空白のない単純な文字列です。この後、root/auth/realms/{realm}/protocol/saml/clients/{url-name}
の URL でクライアントを参照できます。
IDP によって開始されたログイン実装は REDIRECT バインディングで POST を優先します (詳細は saml バインディングを参照)。そのため、最終バインディングおよび SP URL は以下の方法で選択されます。
-
特定の
Assertion Consumer Service POST Binding URL
が定義される場合 (クライアント設定のFine Grain SAML Endpoint Configuration
設定)。POST バインディングはその URL で使用されます。 -
一般的な
Master SAML Processing URL
が指定されている場合には、この一般的な URL ではなく POST バインディングが使用されます。 -
最後に、(
Fine Grain SAML Endpoint Configuration
内で)Assertion Consumer Service Redirect Binding URL
が設定されている場合は、この URL で REDIRECT バインディングが使用されます。
クライアントに特別なリレー状態が必要な場合は、IDP Initiated SSO Relay State
フィールドの 設定
タブで設定することもできます。または、ブラウザーは RelayState
クエリーパラメーター (つまり root/auth/realms/{realm}/protocol/saml/clients/{url-name}?RelayState=thestate
) にリレー状態を指定することもできます。
アイデンティティーブローカー を使用する場合は、外部 IDP からクライアントの IDP 開始ログインを設定できます。前述のように、ブローカー IDP で IDP 開始ログインに実際のクライアントが設定されている。外部 IDP は、ブローカーを示す特別な URL を参照するアプリケーションの IDP Initiated ログインにクライアントを設定し、仲介 IDP で選択したクライアントの IDP Initiated ログインエンドポイントを表す必要があります。これは、外部 IDP のクライアント設定を意味します。
-
IDP Initiated SSO URL Name
は、IDP Initiated Login initial point として公開される名前に設定されます。 Fine Grain SAML Endpoint Configuration
セクションのAssertion Consumer Service POST Binding URL
は、broker-root/auth/realms/{broker-realm}/broker/{idp-name}/endpoint/clients/{client-id}
の URL に設定する必要があります。ここでは、以下のようになります。- broker-root はベースブローカー URL です。
- broker-realm は、外部 IDP が宣言されるブローカーのレルムの名前です。
- IDP-name はブローカーの外部 IDP の名前です。
-
client-id は、ブローカーで定義された SAML クライアントの
IDP Initiated SSO URL Name
属性の値です。このクライアントは、外部 IDP から IDP Initiated ログインで利用できます。
ブローカー IDP から外部 IDP のクライアント設定に基本的なクライアント設定をインポートできることに注意してください。ブローカー IDP でアイデンティティープロバイダーの設定から利用可能な SP 記述子 を使用し、clients/client-id
をエンドポイント URL に追加するだけです。
8.2.2. SAML エンティティー記述子
SAML 2.0 クライアントを手動で登録するのではなく、標準の SAML エンティティーの XML ファイルを使用してインポートできます。クライアントの追加ページには Import
オプションがあります。
クライアントの追加
ファイルの選択
ボタンをクリックして、エンティティー記述子ファイルを読み込みます。そこに情報をすべて確認して、すべてが正しく設定されていることを確認する必要があります。
mod-auth-mellon などの SAML クライアントアダプターの中には、IDP の XML エンティティー記述子が必要です。この公開 URL (root/auth/realms/{realm}/protocol/saml/descriptor
) に移動して、これを取得できます。
8.3. クライアントリンク
あるクライアントから別のクライアントにリンクするシナリオの場合、Red Hat Single Sign-On は特別なリダイレクトエンドポイント /realms/realm_name/clients/{client-id}/redirect
を提供します。
クライアントが HTTP GET
リクエスト経由でこのエンドポイントにアクセスする場合、Red Hat Single Sign-On はレスポンスの Location
ヘッダーを通じて HTTP 307
(Temporary Redirect)の形式で提供された Client および Realm 用に設定済みのベース URL を返します。
そのため、クライアントはリンクするためにレルム名とクライアント ID のみを知っている必要があります。この間接化は、クライアントベース URL のハードコーディングを回避するのに役立ちます。
たとえば、レルム master
と client-id account
がある場合:
http://host:port/auth/realms/master/clients/account/redirect
一時的に http://host:port/auth/realms/master/account にリダイレクトします。
8.4. OIDC トークンおよび SAML アサーションマッピング
ID トークン、アクセストークン、または SAML アサーションを受信するアプリケーションは、異なるユーザーメタデータおよびロールを必要とする場合があります。Red Hat Single Sign-On を使用すると、転送するものを正確に定義できます。ロール、要求、およびカスタム属性をハードコーディングできます。ユーザーメタデータをトークンまたはアサーションにプルできます。ロールの名前を変更できます。基本的には、クライアントに戻ることを正確に制御している多くのコントロールがあります。
管理コンソール内で、登録したアプリケーションを選択すると、マッパー
タブが表示されます。以下は、OIDC ベースのクライアント用です。
マッパータブ
新しいクライアントにはビルトインマッパーがありませんが、クライアントスコープセクション で説明されているように、通常はクライアントスコープから一部のマッパーを継承します。プロトコルマッパーは、たとえばメールアドレスをアイデンティティーおよびアクセストークンの特定の要求にマップします。これらの関数は、それぞれの関数を名前に含める必要があります。Add Builtin
ボタンをクリックして、追加可能なクライアントに割り当てられていない追加の事前設定されたマッパーがあります。
各マッパーには共通する設定と、追加するマッパーのタイプに応じて追加の設定があります。リスト内のマッパーの 1 つの横にある Edit
ボタンをクリックして config 画面に移動します。
マッパーの設定
設定オプションについて学ぶ最適な方法として、ツールチップの上にマウスをかざすことができます。
ほとんどの OIDC マッパーにより、要求を配置する場所を制御できます。Add to ID token
および Add to access token
スイッチを使用すると、id と access トークンの両方から要求を組み込むか、または除外することができます。
最後に、他のマッパータイプを追加することもできます。Mappers
タブに戻る場合は、Create
ボタンをクリックします。
マッパーの追加
リストボックスから Mapper Type
を選択します。ツールチップにマウスをかざすと、マッパーのタイプの動作が表示されます。マッパータイプごとに異なる設定パラメーターが表示されます。
8.4.1. 優先順位
マッパー実装には優先順位があります。この優先順位はマッパーの設定プロパティーではなく、マッパーの具体実装のプロパティーになります。
マッパーは、マッパーのリストの順序で並び替え、トークンまたはアサーションの変更は、最初に適用される順を使用して適用されます。つまり、他の実装に依存する実装は、必要な順序で処理されます。
たとえば、まずトークンに含まれるロールを計算する場合は、まずそれらのロールに基づいてオーディエンスを解決します。次に、トークンにすでに利用可能なロールおよびオーディエンスを使用する JavaScript スクリプトを処理します。
8.4.2. OIDC ユーザーセッションノートマッパー
ユーザーセッションの詳細はマッパー経由で行われ、さまざまな基準によって異なります。クライアントで機能を使用または有効化すると、ユーザーセッションの詳細が自動的に含まれます。Add builtin
ボタンをクリックして、セッションの詳細を含めることもできます。
切り替え後のユーザーセッションは以下の詳細を提供します。
-
IMPERSONATOR_ID
: 偽装ユーザーの ID -
IMPERSONATOR_USERNAME
: 偽装ユーザーのユーザー名
サービスアカウントセッションは以下の詳細を提供します。
-
clientID
: サービスアカウントのクライアント ID -
clientAddress
: サービスアカウントの認証されたデバイスのリモートホスト IP -
clientHost
: サービスアカウントの認証デバイスのリモートホスト名
8.4.3. スクリプトマッパー
Script Mapper
を使用すると、ユーザー定義の JavaScript コードを実行して要求をトークンにマッピングできます。サーバーにスクリプトをデプロイする方法は、「JavaScript プロバイダー」を参照してください。
スクリプトをデプロイしたら、利用可能なマッパーの一覧からデプロイしたスクリプトを選択できるはずです。
8.5. クライアントアダプター設定の生成
Red Hat Single Sign-On は、アプリケーションのデプロイメント環境にクライアントアダプターをインストールするのに使用できる設定ファイルを事前に生成します。OIDC と SAML の両方で、多くのアダプタータイプがサポートされます。設定を生成するクライアントの Installation
タブに移動します。
設定用に生成された Format Option
を選択します。OIDC および SAML のすべての Red Hat Single Sign-On クライアントアダプターがサポートされます。SAML の mod-auth-mellon Apache HTTPD アダプターと、標準の SAML エンティティー記述子ファイルがサポートされます。
8.6. クライアントスコープ
多くのアプリケーションを組織内で保護および登録する必要がある場合には、これらの各クライアントに プロトコルマッパー と ロールスコープのマッピング を設定することが簡単になります。Red Hat Single Sign-On では、共有クライアント設定を クライアントスコープ と呼ばれるエンティティーに定義できます。
クライアントスコープは OAuth 2 scope
パラメーターもサポートします。これにより、アプリケーションのニーズに応じて、クライアントアプリケーションがアクセストークン内の要求またはロールを要求できます。
クライアントスコープを作成するには、以下の手順に従います。
-
左側のメニュー項目
Client Scopes
に移動します。この初期画面には、現在定義されているクライアントスコープの一覧が表示されます。
クライアントスコープの一覧
-
Create
ボタンをクリックします。クライアントスコープに名前を付け、保存します。クライアントスコープ には、通常のクライアントと同様のタブがあります。プロトコルマッパー と ロールスコープマッピング を定義できます。このマッピングは、他のクライアントによって継承でき、このクライアントスコープから継承するように設定されます。
8.6.1. プロトコル
クライアントスコープを作成する場合は、Protocol
を選択する必要があります。同じプロトコルを使用するクライアントのみを、このクライアントスコープにリンクできます。
新しいレルムを作成したら、メニューに事前定義 (組み込み) クライアントスコープの一覧があることを確認できます。
-
SAML プロトコルには、SAML アサーションのロールリストを表示するためのプロトコルマッパーを 1 つ持つ 組み込みクライアントスコープ
roles_list
が 1 つあります。 -
OpenID Connect プロトコルには、クライアントスコーププロファイル
profile
、email
、address
、phone
、offline_access
、roles
、web-origins
、およびmicroprofile-jwt
があります。
クライアントスコープ (offline_access
) は、クライアントがオフライントークンを取得する場合に便利です。Offline Access セクション または OpenID Connect 仕様 でオフライントークンについて説明します。ここで、scope パラメーターは offline_access
の値で定義されます。
クライアントスコーププロファイル、profile
、email
、address
、および phone
は、OpenID Connect 仕様 にも定義されています。これらのクライアントスコープにはロールスコープのマッピングが定義されていませんが、一部のプロトコルマッパーが定義されており、これらのマッパーは OpenID Connect 仕様で定義される要求に対応します。
たとえば、phone
クライアントのスコープを開き、Mappers
タブを開くと、プロトコルマッパーが表示されます。これは、スコープの phone
の仕様で定義される要求に対応します。
クライアントスコープマッパー
phone
クライアントスコープがクライアントにリンクされると、そのクライアントは phone
クライアントスコープで定義されたすべてのプロトコルマッパーを自動的に継承します。このクライアントに発行されたアクセストークンには、ユーザーに関する電話番号 (電話番号が定義されているか) が含まれます。
組み込みクライアントスコープには、仕様に定義されているプロトコルマッパーを正確に含まれますが、クライアントスコープを編集し、プロトコルマッパー (またはロールの範囲) の作成/更新/削除を行うことができます。
クライアントスコープ ロール
は OpenID Connect 仕様に定義されず、アクセストークンの スコープ
要求に自動的に追加されません。このクライアントスコープにはいくつかのマッパーがあります。これは、ユーザーのロールをアクセストークンに追加するために使用され、Audience セクションに記載されているように、1 つ以上のクライアントロールを持つクライアントのオーディエンスを追加するために使用されます。
クライアントスコープの web-origins
も OpenID Connect 仕様には定義されず、scope
要求には追加されません。これは、許可される Web オリジンをアクセストークン allowed-origins
要求に追加するために使用されます。
クライアント scopemicroprofile-jwt
は MicroProfile/JWT Auth Specification で定義された要求を処理するために作成されています。このクライアントスコープは、upn
要求のユーザープロパティーマッパーと、groups
クレームのレルムロールマッパーを定義します。これらのマッパーは、MicroProfile/JWT 固有の要求を作成するために、必要に応じてこれらのマッパーを変更できます。
8.6.2. 関連設定
クライアントスコープには、consent 画面に関連するオプションが含まれます。これらのオプションは、リンク先のクライアントが合意を必要とするように設定されている場合のみ便利です (Consent Required
スイッチがクライアントで有効になっている場合)。
- 画面の表示
-
必要時にこのクライアントスコープがクライアントに追加されると、
Consent Screen Text
で指定されたテキストが継続された画面に表示されます。これは、ユーザーが認証され、Red Hat Single Sign-On からクライアントにリダイレクトされる直前に表示されます。スイッチがオフの場合、このクライアントスコープは Consent 画面に表示されません。 - Consent Screen Text
-
このクライアントスコープが、必要なデフォルト値がクライアントの範囲名である一部のクライアントに追加されると、consent 画面にテキストが表示されます。このテキストの値は、置換変数を
${var-name}
文字列に指定することで、ローカライズ可能にすることができます。ローカライズ値は、ご自分のテーマのプロパティーファイル内で設定されます。ローカライゼーションの詳細は、『サーバー開発者ガイド』を参照してください。
8.6.3. クライアントとリンククライアントスコープ
クライアントスコープとクライアント間のリンクは、特定のクライアントの Client Scopes
タブで設定されます。クライアントスコープとクライアント間をリンクする方法は 2 つあります。
- デフォルトのクライアントスコープ
- これは、OpenID Connect および SAML クライアントの両方に適用されます。デフォルトのクライアントスコープは、このクライアントの OpenID Connect トークンまたは SAML アサーションを発行するときに常に適用されます。クライアントはプロトコルマッパーとロールスコープのマッピングをクライアントスコープで継承します。OpenID Connect Protocol の場合、OpenID Connect の承認要求の scope パラメーターで使用される値にかかわらず、マッパーおよびロールの範囲マッピングは常に適用されます。
- オプションのクライアントスコープ
-
これは、OpenID Connect クライアントにのみ適用されます。オプションのクライアントスコープはこのクライアントのトークンを発行するときに適用されますが、これらは OpenID Connect 承認要求で
scope
パラメーターによって要求される場合にのみ適用されます。
8.6.3.1. 例
この例では、クライアントに profile
と email
がデフォルトのクライアントスコープとしてリンクされていることと、phone
と address
がオプションのクライアントスコープとしてリンクされていることを前提とします。クライアントは、要求を OpenID Connect 承認エンドポイントに送信する際に、scope パラメーターの値を使用します。
scope=openid phone
scope パラメーターには文字列が含まれ、スコープの値がスペースで区切られます (クライアントスコープ名にはスペース文字が含まれないためです)。openid
の値は、すべての OpenID Connect 要求に使用されるメタ値であるため、この例では無視します。トークンには、クライアントスコープの profile
、email
(デフォルトのスコープ)、および phone
(scope パラメーターで要求される任意のクライアントスコープ) からのマッパーおよびロールスコープのマッピングが含まれます。
8.6.4. クライアントスコープの評価
クライアントのタブ Mappers
および Scope
には、このクライアントのみに宣言されたプロトコルマッパーとロールスコープマッピングが含まれます。クライアントスコープから継承されるマッパーおよびスコープのマッピングは含まれません。ただし、有効なプロトコルマッパーが (クライアント自体で定義されるプロトコルマッパー)、リンクされたクライアントスコープから継承するものと、特定クライアントのトークンを生成するときに使用される有効なロールスコープマッピングを確認すると便利です。
クライアントの Client Scopes
タブをクリックしてからサブタブ Evaluate
をクリックすると、これらすべてが表示されます。ここから、適用する任意のクライアントスコープを選択できます。また、これにより scope
パラメーターの値も表示されます。これは、アプリケーションから Red Hat Single Sign-On OpenID Connect 承認エンドポイントに送信する必要があります。
クライアントスコープの評価
アプリケーションから scope
パラメーターのカスタム値を送信する方法を確認したい場合は、アプリケーションがサーブレットアダプターを使用する場合は、パラメーター転送セクション、またはアプリケーションが javascript アダプターを使用する場合は javascript アダプターの項を参照してください。
8.6.4.1. サンプルトークンの生成
特定のユーザーに生成された実際のアクセストークンの例を確認し、特定のクライアントに対して発行し、scope
パラメーターで指定した値を使用して、Evaluate
画面でユーザーを選択します。これにより、すべての要求およびロールマッピングを含むトークンのサンプルが生成されます。
8.6.5. クライアントスコープのパーミッション
特定のユーザーのトークンを発行すると、クライアントスコープは、ユーザーがそれを使用できる場合のみ適用されます。クライアントスコープにロールスコープマッピングがそれ自体に定義されている場合は、各ユーザーは自動的にこのクライアントスコープを使用できます。ただし、クライアントスコープにそれ自体で定義されているロールスコープのマッピングがある場合は、ユーザーは少なくとも 1 つのロールのメンバーである必要があります。つまり、ユーザーロールとクライアントスコープのロール間に交差部分が必要です。この交差部分の評価時に、複合ロールが考慮されます。
ユーザーがクライアントスコープを使用できない場合、トークンの生成時にプロトコルマッパーまたはロールスコープマッピングは使用されなくなり、トークンの範囲にクライアントスコープは表示されません。
8.6.6. レルムのデフォルトクライアントスコープ
Realm Default Client Scopes
を使用すると、新規作成されたクライアントへ自動的にリンクされるクライアントスコープのセットを定義できます。
左側のメニュー項目 Client Scopes
を開き、Default Client Scopes
を選択します。
ここから、新規作成したクライアントに Default Client Scopes
として追加するクライアントスコープを選択し、Optional Client Scopes
を新規作成したクライアントに設定します。
デフォルトのクライアントスコープ
クライアントが作成されると、必要に応じて、デフォルトのクライアントスコープのリンクを解除できます。これは、デフォルトのロールを削除する方法と似ています。
8.6.7. 記述されたスコープ
scope
は数カ所時に Red Hat Single Sign-On で使用されます。さまざまなスコープの発生は相互に関係しますが、異なるコンテキストと意味を持つ可能性があります。ここでは、Red Hat Single Sign-On で使用されるさまざまな scopes
を説明します。
- クライアントスコープ
-
本章で参照されています。クライアントスコープは、レルムレベルで設定され、クライアントにリンクできる Red Hat Single Sign-On のエンティティーです。
scope
パラメーターの対応する値で Red Hat Single Sign-On 承認エンドポイントに要求を送信すると、クライアントスコープはその名前によって参照されます。詳細は、「クライアントスコープのリンク」のセクションを参照してください。 - ロールスコープのマッピング
-
これは、クライアントまたはクライアントスコープの
Scope
タブを開くと表示されます。ロールスコープのマッピングにより、アクセストークンで使用できるロールを制限できます。詳細は、「ロールスコープマッピング」セクションを参照してください。
第9章 Roles
ロールはユーザーのタイプまたはカテゴリーを識別します。Admin
、user
、manager
、employee
は、組織に存在する可能性のある通常のロールすべてです。アプリケーションは通常、多くの場合、個々のユーザーではなく、特定のロールにアクセスおよびパーミッションを割り当てます。これは、ユーザーの処理は複雑で、管理が困難となるためです。たとえば、管理コンソールには特定のロールがあり、管理コンソール UI の部分にアクセスし、特定のアクションを実行するパーミッションを付与します。また、ロールのグローバル名前空間があり、各クライアントにはロールを定義する独自の専用の名前空間もあります。
9.1. レルムロール
レルムレベルのロールは、ロールを定義するグローバル名前空間です。左メニュー項目 Roles
をクリックすると、組み込みロールおよび作成されたロールの一覧を表示できます。
ロールを作成するには、このページの Add Role をクリックし、ロールの名前と説明を入力して Save をクリックします。
ロールの追加
description
フィールドの値は、${var-name}
文字列で置換変数を指定してローカライズできます。ローカライズ値は、ご自分のテーマのプロパティーファイル内で設定されます。ローカライゼーションの詳細は、『サーバー開発者ガイド』を参照してください。
9.2. クライアントロール
クライアントロールは基本的にクライアント専用の名前空間です。各クライアントは独自の名前空間を取得します。クライアントロールは、各クライアントの Roles
タブで管理されます。この UI は、レルムレベルのロールの場合と同じように対話します。
9.3. 複合ロール
レルムまたはクライアントレベルのロールは、複合ロールに変換できます。複合ロールは、1 つ以上の追加ロールに関連付けられたロールです。複合ロールがユーザーにマップされると、ユーザーはその複合に関連付けられたロールも取得します。この継承は再帰的であるため、複合の複合も継承されます。
通常のロールを複合ロールに変換するには、ロールの詳細ページに移動し、Composite Role
スイッチをオンにします。
複合ロール
切り替え後、ロール選択 UI がページ下部に表示されると、レルムレベルとクライアントレベルのロールを、作成している複合に関連付けることができます。この例では、employee
realm-level ロールは、developer
の複合ロールに関連付けられているものです。developer
ロールを持つユーザーも、employee
ロールも継承されます。
トークンと SAML アサーションが作成されると、複合ロールにも、クライアントに送信された認証応答のクレームおよびアサーションに追加されます。
9.4. ユーザーロールのマッピング
ユーザーロールのマッピングは、その単一のユーザーの Role Mappings
タブを使用して、各ユーザーに個別に割り当てることができます。
ロールマッピング
上記の例では、「複合ロール」の章で作成した複合ロール developer
を割り当てます。
有効なロールマッピング
developer
ロールが割り当てられると、developer
複合に関連する 社員
ロールが Effective Roles
に表示されます。Effective Roles
は、ユーザーと明示的に割り当てられたロールと、複合から継承されたロールです。
9.4.1. Default Roles
デフォルトロールでは、ユーザーが Identity Brokering を使用して新規に作成またはインポートされると、ユーザーロールのマッピングを自動的に割り当てることができます。デフォルトのロールを指定するには、左メニュー項目 Roles
に移動し、Default Roles
タブをクリックします。
Default Roles
スクリーンショットから分かるように、デフォルトで多くのデフォルトロールが設定されています。
9.5. Role Scope Mappings
OIDC アクセストークンまたは SAML アサーションが作成されると、ユーザーのすべてのユーザーロールマッピングがデフォルトで、トークンまたはアサーションにクレームとして追加されます。アプリケーションはこの情報を使用して、そのアプリケーションが制御するリソースのアクセス決定を行います。Red Hat Single Sign-On では、アクセストークンはデジタル署名され、実際にはアプリケーションによって再利用され、リモートでセキュアな REST サービスで呼び出すことができます。つまり、アプリケーションが危険にさらされるか、レルムに登録されている不正なクライアントがある場合、攻撃者は幅広いパーミッションを持ち、ネットワーク全体に危険にさらされることができるアクセストークンを取得することができます。これは、ロールスコープのマッピングが重要な場所です。
ロールスコープのマッピングは、アクセストークン内で宣言されたロールを制限する手段です。クライアントがユーザー認証をリクエストすると、受信するアクセストークンにはクライアントのスコープに明示的に指定したロールマッピングのみが含まれます。これにより、すべてのユーザーのパーミッションにクライアントアクセスを付与するのではなく、個々のアクセストークンごとのパーミッションを制限できます。デフォルトでは、各クライアントはユーザーのすべてのロールマッピングを取得します。これは、各クライアントの Scope
タブで確認できます。
フルサポート
スコープの有効なロールがレルム内で宣言されたすべてのロールであることを図ることができます。このデフォルトの動作を変更するには、Full Scope Allowed
スイッチを明示的に無効にし、各クライアントに必要な特定のロールを宣言する必要があります。または、クライアントスコープを使用してクライアントのセット全体で同じロールスコープマッピングを定義することもできます。
部分的なスコープ
第10章 グループ
Red Hat Single Sign-On のグループを使用すると、一連のユーザーの共通の属性とロールマッピングを管理できます。ユーザーは、ゼロ以上のグループのメンバーにすることができます。ユーザーは、各グループに割り当てられた属性とロールマッピングを継承します。グループの管理は、左側のメニュー項目の Groups
に移動します。
グループ
グループは階層です。グループには多くのサブグループを指定できますが、グループは親を 1 つだけ指定できます。サブグループは、親から属性およびロールのマッピングを継承します。これは、ユーザーにも適用されます。そのため、親グループと子グループのみに属するユーザーがある場合は、ユーザーは親と子の両方の属性とロールマッピングを継承します。この例では、最上位の Sales
グループと、North America
サブグループがあります。グループを追加するには、新しい子を追加する親をクリックし、New
ボタンをクリックします。ツリー内の Groups
アイコンを選択して最上位のグループを作成します。Create Group
画面にグループ名を入力して Save
をクリックすると、個別のグループ管理ページが表示されます。
グループ
Attributes
タブおよび Role Mappings
タブは、ユーザーに類似した名前のタブと全く機能します。定義する属性とロールマッピングは、このグループのメンバーであるグループおよびユーザーによって継承されます。
ユーザーをグループに追加するには、ユーザーの詳細ページに戻り、そこに Groups
タブをクリックします。
ユーザーグループ
Available Groups
ツリーからグループを選択し、参加
ボタンを押してユーザーをグループに追加する。グループを削除する逆も同様です。ここでは、North America グループにユーザー Jim を追加しました。そのグループの詳細ページに戻り、Membership
タブを選択すると Jim がそこに表示されます。
グループメンバーシップ
10.1. グループ 対Roles
IT 業界では、Group および Role の概念が曖昧で、混同していることがよくあります。Red Hat Single Sign-On では、グループはユーザーの集まりで、ロールおよび属性を 1 箇所に適用できます。ロールは、ユーザーやアプリケーションのタイプがロールに対してパーミッションおよびアクセス制御を割り当てます。
複合ロールもグループと類似していますか?論理的に同じ機能が提供されますが、違いは概念的です。複合ロールは、サービスやアプリケーションのセットにパーミッションモデルを適用するために使用する必要があります。グループは、組織内のユーザーおよびロールのコレクションに重点を置いてください。グループを使用してユーザーを管理します。複合ロールを使用してアプリケーションおよびサービスを管理します。
10.2. デフォルトグループ
デフォルトのグループでは、Identity Brokering を使用して新規ユーザーが作成またはインポートされるたびに、グループメンバーシップを自動的に割り当てることができます。デフォルトのグループを指定するには、左メニュー項目 Groups
に移動し、Default Groups
タブをクリックします。
デフォルトグループ
第11章 管理コンソールアクセス制御およびパーミッション
Red Hat Single Sign-On で作成された各レルムには、そのレルムを管理できる専用の管理コンソールがあります。master
レルムは、管理者がシステムで複数のレルムを管理できるようにする特別なレルムです。異なるレルムでユーザーへの詳細なアクセスを定義して、サーバーを管理することもできます。本章では、このシナリオをすべて実施します。
11.1. マスターレルムアクセス制御
Red Hat Single Sign-On の master
レルムは特別なレルムで、他のレルムとは異なる処理を行います。Red Hat Single Sign-On master
レルムのユーザーは、Red Hat Single Sign-On サーバーにデプロイされるゼロ以上のレルムを管理するパーミッションを付与できます。レルムが作成されると、Red Hat Single Sign-On は、その新しいレルムにアクセスするための詳細な権限を付与するさまざまなロールを自動的に作成します。管理コンソールおよび管理 REST エンドポイントへのアクセスは、これらのロールを master
レルムのユーザーにマッピングすることで制御できます。特定のレルムのみを管理できるユーザーは、複数のスーパーユーザーを作成することができます。
11.1.1. グローバルロール
master
レルムには、2 つのレルムレベルのロールがあります。以下のとおりです。
- admin
- create-realm
admin
ロールを持つユーザーはスーパーユーザーであり、サーバー上のレルムを管理するためにフルアクセスできます。create-realm
ロールを持つユーザーは、新しいレルムを作成できます。このユーザーは、作成する新しいレルムに完全アクセスできます。
11.1.2. レルム固有のロール
master
レルム内の管理者ユーザーには、システムの他のレルムに対して管理権限を付与できます。Red Hat Single Sign-On の各レルムは、master
レルムのクライアントで表されます。クライアントの名前は <realm name>-realm
です。これらのクライアントには、クライアントレベルのロールが定義されており、個別のレルムを管理するアクセスレベルを定義します。
利用可能なロールは以下のとおりです。
- view-realm
- view-users
- view-clients
- view-events
- manage-realm
- manage-users
- create-client
- manage-clients
- manage-events
- view-identity-providers
- manage-identity-providers
- impersonation
ユーザーに必要なロールを割り当てると、管理コンソールのその特定の部分のみを使用できます。
manage-users
ロールを持つユーザー管理者は、admin ロールを所有したユーザーにのみ割り当てることができます。したがって、admin に manage-users
ロールがあり、manage-realm
ロールがない場合、このロールを割り当てることができます。
11.2. 専用レルム管理コンソール
各レルムには、URL /auth/admin/{realm-name}/console
に移動してアクセス可能な専用の管理コンソールがあります。特定のユーザーロールマッピングを割り当てることで、そのレルム内のユーザーにレルム管理パーミッションを付与できます。
各レルムには、realm-management
と呼ばれる組み込みクライアントがあります。このクライアントは、レルムの左側のメニュー項目 Clients
に移動すると表示できます。このクライアントは、レルムの管理に付与できるパーミッションを指定するクライアントレベルのロールを定義します。
- view-realm
- view-users
- view-clients
- view-events
- manage-realm
- manage-users
- create-client
- manage-clients
- manage-events
- view-identity-providers
- manage-identity-providers
- impersonation
ユーザーに必要なロールを割り当てると、管理コンソールのその特定の部分のみを使用できます。
11.3. Fine Grain Admin Permissions
Fine Grain Admin Permissions はテクノロジープレビュー機能ですが、完全にサポートされていません。この機能はデフォルトでは無効にされます。
-Dkeycloak.profile=preview
または -Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
を使用してサーバーを起動します。詳細は「プロファイル」を参照してください。
manage-realm
、manage-users
などのロールは粒度が荒すぎて、より詳細なパーミッションを持つ制限された admin アカウントの作成が必要になることがあります。Red Hat Single Sign-On を使用すると、レルム管理に制限付きアクセスポリシーを定義して割り当てることができます。以下に例を示します。
- 特定のクライアントの管理
- 特定グループに所属するユーザーの管理
- グループのメンバーシップの管理
- 制限されたユーザー管理。
- 粒度の個人設定制御
- ユーザーの特定の制限付きロールセットを割り当てることができる。
- 特定の制限付きロールセットを複合ロールに割り当てることができます。
- 特定の制限付きロールのセットをクライアントのスコープに割り当てることができます。
- ユーザー、グループ、ロール、およびクライアントを表示および管理するための新しい一般的なポリシー。
admin パーミッションに関する重要な点について、以下の重要な点に留意してください。
- 粒度の細かい管理権限は、承認サービス に実装されました。細分のパーミッションに分割する前に、この機能に対して読むことを強く推奨します。
- 細かいアクセス権限は、専用の管理コンソールおよびそれらのレルム内でのみ利用できます。レルム間の細かいグラザブルパーミッションを定義することはできません。
- 追加のパーミッションを付与するのに細かいパーミッションを使用します。ビルトインの admin ロールのデフォルト動作を上書きすることはできません。
11.3.1. 特定のクライアントの管理
最初に、管理者がクライアントを 1 つ、クライアントを 1 つだけ管理できるようにします。この例では、test
という名前のレルムと、sales-application
というクライアントがあります。レルム test
では、そのレルムのパーミッションで、そのアプリケーションを管理する権限をユーザーに付与します。
レルムの細かいアクセス権限をまたがって実行できません。master
レルムの管理者は、以前の章で定義された事前定義済みの admin ロールに制限されます。
11.3.1.1. パーミッションのセットアップ
最初に管理コンソールにログインし、そのクライアントのパーミッションを設定できます。きめ細かなパーミッションを定義するクライアントの管理セクションに移動します。
クライアント管理
Permissions
というタブメニュー項目が表示されるはずです。そのタブをクリックします。
クライアントパーミッションタブ
デフォルトでは、各クライアントは細かいパーミッションを実行することはできません。したがって、Permissions Enabled
をオンにしてパーミッションを初期化します。
Permissions Enabled
スイッチをオフに設定すると、このクライアントに定義したすべてのパーミッションが削除されます。
クライアントパーミッションタブ
Permissions Enabled
を on に切り替えると、「承認サービス」を使用して、背後でさまざまなパーミッションオブジェクトを初期化します。この例では、クライアントの 管理
パーミッションが対象になります。クライアントの manage
パーミッションを処理するパーミッションにリダイレクトするものをクリックします。すべての承認オブジェクトは、realm-management
クライアントの Authorization
タブに含まれます。
クライアントパーミッションの管理
最初に初期化された場合、manage
パーミッションには関連付けられたポリシーがありません。policy タブに移動して作成する必要があります。高速に進むには、上記のイメージに表示される Authorization
リンクをクリックします。次に、policies タブをクリックします。
このページに、Create policy
というプルダウンメニューがあります。設定可能なさまざまなポリシーがあります。ロールまたはグループに関連付けられたポリシーを定義したり、JavaScript でルールを定義したりできます。この簡単な例では、User Policy
を作成します。
ユーザーポリシー
このポリシーは、ユーザーデータベースのハードコーディングされたユーザーと一致します。この場合、これは sales-admin
ユーザーです。次に、sales-application
クライアントの manage
パーミッションページに戻り、ポリシーをパーミッションオブジェクトに割り当てる必要があります。
ユーザーグループの割り当て
sales-admin
ユーザーには、sales-application
クライアントを管理するパーミッションが使用できるようになりました。
さらに 1 つのことが必要です。Role Mappings
タブに移動し、query-clients
ロールを sales-admin
に割り当てます。
query-clients の割り当て
これを行う必要があるのはなぜですか?このロールは、sales-admin
が管理コンソールにアクセスする際にレンダリングするメニュー項目を管理コンソールに指示します。query-clients
ロールは、sales-admin
ユーザーのクライアントメニューをレンダリングするよう管理コンソールに指示します。
IMPORTANT query-clients
ロールを設定しない場合、sales-admin
などの制限された管理者が管理コンソールにログインするときにメニューオプションは表示されません。
11.3.1.2. それをテストします。
次に、master レルムからログアウトし、sales-admin
をユーザー名として使用し、test
レルムの 専用の管理コンソール に再ログインします。これは /auth/admin/test/console
にあります。
売上管理者ログイン
これで、この admin がこのクライアントを 1 つ管理できるようになりました。
11.3.2. ユーザーロールのマッピングの制限
もう 1 つのことは、管理者がユーザーに割り当てることのできるロールセットを制限することです。最後のサンプルを続行して、'sales-admin' ユーザーのパーミッションセットを拡張して、このアプリケーションにアクセスできるユーザーも制御できるようにします。細かいパーミッションにより、sales-admin
が sales-application
への特定のアクセス権限を付与するロールのみを割り当てることができます。また、管理者はロールのみをマッピングでき、他のタイプのユーザー管理を実行しないように制限することもできます。
sales-application
が 3 つの異なるクライアントロールを定義しました。
売上アプリケーションロール
sales-admin
ユーザーがこれらのロールをシステムの任意のユーザーにマッピングできるようにします。これを実行する最初のステップでは、ロールが admin でマップされるようにします。viewLeads
ロールをクリックすると、このロールの Permissions
タブがあることを確認できます。
Leads ロールのパーミッションタブの表示
そのタブをクリックし、Permissions Enabled
を on にすると、ポリシーを適用することのできる多数のアクションが表示されます。
Leads パーミッションの表示
関心のあるのは map-role
です。このパーミッションをクリックし、上記の例で作成されたのと同じ User Policy を追加します。
map-roles パーミッション
行った内容は、sales-admin
が viewLeads
ロールをマッピングできることを示しています。何も指定していないユーザーは、管理者がこのロールをマップできるユーザーで指定します。このレルムの管理コンソールの Users
セクションに移動する必要があります。左側のメニュー項目 Users
をクリックすると、レルムのユーザーインターフェースが表示されます。Permissions
タブが表示されるはずです。それをクリックして有効にします。
ユーザーパーミッション
対象のパーミッションは map-roles
です。これは、管理者のみがロールをユーザーにマッピングできるようにする制限ポリシーです。map-roles
パーミッションをクリックし、作成したユーザーポリシーを再度追加すると、sales-admin
はロールをどのユーザーにもマッピングできます。
最後に、view-users
ロールを sales-admin
に追加します。これにより、管理者は、sales-application
ロールを追加するレルム内のユーザーを表示できます。
view-users の追加
11.3.2.1. それをテストします。
次に、master レルムからログアウトし、sales-admin
をユーザー名として使用し、test
レルムの 専用の管理コンソール に再ログインします。これは /auth/admin/test/console
にあります。
これで、sess-admin
がシステムにユーザーを表示できるようになります。ユーザーの 1 つを選択すると、各ユーザー詳細ページが読み取り専用であることが表示されます (Role Mappings
タブを除く)。これらのタブに移動すると、sales-application
ロールをブラウズした場合を除き、admin がユーザーにマップするのに 使用可能な
ロールがないことが確認できます。
viewLeads の追加
sales-admin
が viewLeads
ロールをマッピングすることのみを指定しました。
11.3.2.2. クライアントごとのマップショートカット
sales-application
を公開するすべてのクライアントロールに対してこれを行う必要がある場合や、より容易になってしまうと、管理者がクライアントで定義されているすべてのロールをマップできるように指定する方法があります。マスターレルム admin に管理コンソールにログインし、sales-application
パーミッションページに戻ると、map-roles
パーミッションが表示されます。
クライアント map-roles パーミッション
この特別なパッションへのアクセスを管理者に付与すると、その admin はクライアントで定義されるロールをマップできます。
11.3.3. パーミッションの完全リスト
特定のクライアントやクライアントの特定のロールの管理以外に、より詳細なパーミッションを設定することが可能です。本章では、レルムに設定できるパーミッションタイプ全体を定義します。
11.3.3.1. ロール
特定のロールの Permissions
タブに移動すると、これらのパーミッションタイプが表示されます。
- map-role
- 管理者がこのロールをユーザーにマッピングできるかどうかを決定するポリシー。これらのポリシーは、管理者がユーザーロールマッピングタスクを実行することが許可されているわけではなく、ロールをユーザーにマッピングできることのみを指定します。また、管理者は管理またはロールのマッピングパーミッションを持っている必要があります。詳細は、「ユーザーパーミッション」を参照してください。
- map-role-composite
-
管理者がこのロールを複合としてマッピングできるかどうかを決定するポリシー。管理者は、そのクライアントのパーミッションを管理しているにも拘らず、ロールの
map-role-composite
権限がない場合は、クライアントのロールを定義できます。 - map-role-client-scope
- 管理者がこのロールをクライアントの範囲に適用するかどうかを決定するポリシー。管理者がクライアントを管理できる場合でも、この特権が付与されない限り、このロールを含むクライアントのトークンを作成するパーミッションがありません。
11.3.3.2. クライアント
特定のクライアントのパーミッション
タブに移動すると、これらのパーミッションタイプが表示されます。
- view
- 管理者がクライアントの設定を表示できるかどうかを決定するポリシー。
- manage
- 管理者がクライアントの設定を表示および管理するかどうかを判断するポリシー。この場合、特権は意図せずにリークする可能性があるという問題があります。たとえば、管理者がロールをクライアントのスコープにマップする権限を持たない場合でも、管理者はロールをハードコーディングするプロトコルマッパーを定義できます。これは、現状に個別のパーミッションを割り当てる方法がないため、プロトコルマッパーの制限になります。
- configure
-
クライアントを管理するプラルジのセットが減ります。これは、admin 以外の
manage
スコープと同様に、プロトコルマッパーの定義、クライアントテンプレートの変更、クライアントのスコープなどが許可されていません。 - map-roles
- 管理者がクライアントで定義したロールをユーザーにマップできるかどうかを決定するポリシー。これは、クライアントによって定義されるすべてのロールにポリシーに対応できるため、ショートカットで使いやすい機能です。
- map-roles-composite
- 管理者がクライアントで定義したロールを別のロールに複合としてマッピングできるかどうかを決定するポリシー。これはショートカットであり、使いやすく、クライアントが定義した各ロールのポリシーを定義する必要はありません。
- map-roles-client-scope
- 管理者がクライアントで定義した任意のロールを別のクライアントのスコープにマッピングできるかどうかを決定するポリシー。これはショートカットであり、使いやすく、クライアントが定義した各ロールのポリシーを定義する必要はありません。
11.3.3.3. ユーザー
全ユーザーの Permissions
タブに移動すると、全ユーザーのパーミッションタイプが一覧表示されます。
- view
- 管理者がレルム内のすべてのユーザーを表示できるかどうかを決定するポリシー。
- manage
- 管理者がレルム内のすべてのユーザーが管理できるかどうかを決定するポリシー。このパーミッションは管理者にユーザーロールのマッピングごとに特権を付与しますが、管理者がマッピングできるロールを指定しません。admin がマッピングできるように、各ロールに特権を定義する必要があります。
- map-roles
-
これは、
manage
スコープによって付与される権限のサブセットです。この場合、管理者はロールのみをマップできます。admin は、他のユーザー管理操作を実行できません。また、admin
の適用が許可されるロールは、クライアントロールに対応する場合はロールごとまたはロールのセットごとに指定する必要があります。 - manage-group-membership
-
map-roles
と同様に、グループメンバーシップに関連するものを除き、ユーザーが追加または削除できるグループです。これらのポリシーは、管理者がメンバーシップを管理できるグループではなく、グループメンバーシップを管理する admin パーミッションを付与します。各グループのmanage-members
パーミッションにポリシーを指定する必要があります。 - 切り替え
- 他のユーザーの権限を借用できるかを決定するポリシー。これらのポリシーは、管理者の属性およびロールマッピングに適用されます。
- user-impersonated
- 権限を借用できるユーザーを決定するポリシー。これらのポリシーは、権限を借用するユーザーに適用されます。たとえば、管理者権限のあるユーザーを偽装するポリシーを定義する場合などです。
11.3.3.4. グループ
特定のグループの Permissions
タブに移動すると、これらのパーミッションタイプが表示されます。
- view
- 管理者がグループの情報を表示するかどうかを決定するポリシー。
- manage
- 管理者がグループの設定を管理するかどうかを決定するポリシー。
- view-members
- 管理者がグループのメンバーのユーザーの詳細を表示できるかどうかを決定するポリシー。
- manage-members
- 管理者がこのグループに所属するユーザーを管理するかどうかを決定するポリシー。
- manage-membership
- 管理者がグループのメンバーシップを変更できるかどうかを決定するポリシー。グループからメンバーを追加または削除します。
11.4. レルムキー
Red Hat Single Sign-On によって使用される認証プロトコルには、暗号化署名が必要になり、暗号化時があります。Red Hat Single Sign-On では、非対称鍵のペア (秘密鍵と公開鍵) を使用してこれを実現します。
Red Hat Single Sign-On には、同時にアクティブなキーペアが 1 つ含まれますが、複数のパッシブキーを持つこともできます。アクティブなキーペアは新規署名の作成に使用されますが、パッシブキーペアを使用して以前の署名を検証することができます。これにより、ダウンタイムやユーザーの中断なしにキーを定期的にローテーションできます。
レルムがキーペアが作成されると、自己署名証明書が自動的に生成されます。
レルムにアクティブな鍵を表示するには、管理コンソールでレルムを選択し、Realm settings
と Keys
をクリックします。これでレルムのアクティブなキーが表示されます。
パッシブキーまたは無効なキーを表示するには、Passive
または Disabled
を選択します。キーペアにはステータスが Active
になりますが、現在レルムにアクティブなキーペアとして選択されません。署名に使用される選択したアクティブなペアは、優先度別にソートされた最初のキープロバイダーに基づいて選択され、アクティブなキーペアを提供できます。
11.4.1. 鍵のローテーション
鍵を定期的にローテーションすることが推奨されます。これを実行するには、既存のアクティブなキーよりも優先度が高い新しいキーを作成して開始する必要があります。または、同じ優先順位で新しいキーを作成し、以前のキーパッシブを作成します。
新しい鍵が利用可能になると、新しいトークンと cookie はすべて新しいキーで署名されます。ユーザーがアプリケーションに対して認証されると、SSO クッキーは新しい署名で更新されます。OpenID Connect トークンを更新すると、新しいキーで新たなトークンが署名されます。つまり、時間が経過するとすべての Cookie とトークンが新しいキーを使用し、古いキーを削除できる間に続きます。
古いキーを削除するまでの待機時間は、セキュリティー間のトレードオフであり、すべての cookie とトークンが更新されるようにします。通常は、数週間後に古いキーをドロップすることができます。追加された新しい鍵の間にアクティブでアクティブで、以前のキーが削除されるユーザーは再認証する必要があります。
これはオフライントークンにも適用されます。これらのアプリケーションが古いキーが削除される前にトークンを更新する必要のあることを確認するには、アプリケーションを更新します。
ガイドラインとして、3 〜 6 か月ごとに新しいキーを作成し、新規キーの作成後に古いキー 1-2 か月を削除することが推奨されます。
11.4.2. 生成されたキーペアの追加
新しいく生成されたキーペアを追加するには、Providers
を選択して、ドロップダウンから rsa-generated
を選択します。新たなキーペアがアクティブなキーペアになるように、優先度を変更することができます。より小さいキーまたは大きい鍵が必要な場合は、keysize
を変更することもできます (デフォルトは 2048 で、サポートされている値は 1024、2048、および 4096)。
Save
をクリックして、新しいキーを追加します。これにより、自己署名証明書を含む新しいキーペアが生成されます。
プロバイダーの優先度を変更すると、キーが再生成されますが、キーサイズを変更する場合はプロバイダーを編集し、新しいキーが生成されます。
11.4.3. 既存のキーペアおよび証明書の追加
別のユーザーが取得したキーペアと証明書を追加し、Providers
を選択し、ドロップダウンから rsa
を選択します。新たなキーペアがアクティブなキーペアになるように、優先度を変更することができます。
Private RSA Key
の Select file
をクリックして秘密鍵をアップロードします。ファイルは PEM 形式でエンコードされる必要があります。公開鍵から自動的に抽出されるので、公開鍵をアップロードする必要はありません。
キーの署名済み証明書がある場合は、X509 Certificate
の横にある Select file
をクリックします。これを省略できます。これを行わないと、自己署名証明書が生成されます。
11.4.4. Java キーストアからキーを読み込む
ホストの Java キーストアファイルに保存されている鍵と証明書を追加するには、
java-keystore を選択します。新たなキーペアがアクティブなキーペアになるように、優先度を変更することができます。
Provider
を選択し、ドロップダウンから
Keystore
、Keystore Password
、Key Alias
、および Key Password
の値を入力し、Save
をクリックします。
11.4.5. 鍵のパッシブの作成
Active
でキーペアを見つけ、Provider
列でプロバイダーをクリックします。これにより、キープロバイダーの設定画面に移動します。Active
をクリックして OFF
を有効にし、Save
をクリックします。鍵はアクティブではなくなり、署名の検証のみに使用できます。
11.4.6. キーの無効化
Active
でキーペアを見つけ、Provider
列でプロバイダーをクリックします。これにより、キープロバイダーの設定画面に移動します。Enabled
をクリックして OFF
をオンにし、Save
をクリックします。この鍵は有効ではなくなります。
または、プロバイダーを Providers
テーブルから削除できます。
11.4.7. 侵害された鍵
Red Hat Single Sign-On にはローカルに保存された署名キーがあり、クライアントアプリケーション、ユーザー、またはその他のエンティティーと共有されることはありません。ただし、レルム署名鍵が不正であると思われる場合は、上記のように最初に新しいキーペアを生成し、不正アクセスのキーペアを即座に削除する必要があります。
その後、クライアントアプリケーションが、侵害された鍵によって署名されたトークンを受け入れないようにするには、管理コンソールから実行できるレルムの not-before ポリシーを更新し、プッシュする必要があります。新しいポリシーをプッシュすることで、クライアントアプリケーションが侵害された鍵によって署名された既存のトークンを受け入れないようにすることができますが、クライアントアプリケーションも Red Hat Single Sign-On から新しいキーペアをダウンロードするように強制するため、不正アクセスされたキーによって署名されたトークンは有効になりません。REST および機密クライアントには Admin URL
を設定する必要があるため、Red Hat Single Sign-On はプッシュされない not-before ポリシーに関して要求を送信できることに注意してください。
第12章 ID ブローカー
Identity Broker は、複数のサービスプロバイダーを異なるアイデンティティープロバイダーに接続する中間サービスです。中間サービスとして、アイデンティティーブローカーは外部アイデンティティープロバイダーとの信頼関係を作成し、そのアイデンティティーを使用してサービスプロバイダーによって公開される内部サービスにアクセスします。
ユーザーの観点からは、ID ブローカーは、異なるセキュリティードメインまたはレルム全体でアイデンティティーを管理するユーザー中心および集中的な方法を提供します。既存のアカウントは、異なるアイデンティティープロバイダーからの 1 つ以上のアイデンティティーとリンクしたり、そこから取得されたアイデンティティー情報に基づいて作成することもできます。
ID プロバイダーは、通常、ユーザーの認証および承認情報の認証および通信に使用される特定のプロトコルに基づいています。Facebook、Google、または Twitter などのソーシャルプロバイダーになります。これは、ユーザーがサービスにアクセスする必要があるビジネスパートナーにすることができます。または、統合するクラウドベースのアイデンティティーサービスになります。
通常、アイデンティティープロバイダーは以下のプロトコルに基づきます。
-
SAML v2.0
-
OpenID Connect v1.0
-
OAuth v2.0
次のセクションでは、Red Hat Single Sign-On を ID ブローカーとして設定および使用する方法を、以下のような重要な側面を説明します。
-
Social Authentication
-
OpenID Connect v1.0 Brokering
-
SAML v2.0 Brokering
-
Identity Federation
12.1. ブローカーの概要
Red Hat Single Sign-On をアイデンティティーブローカーとして使用する場合、ユーザーは特定のレルムで認証するためにクレデンシャルの提供は強制的にされません。代わりに、これは認証が可能なアイデンティティープロバイダーの一覧と共に表示されます。
デフォルトのアイデンティティープロバイダーを設定することもできます。この場合、ユーザーには選択が指定されませんが、代わりにデフォルトプロバイダーにリダイレクトされます。
以下の図は、Red Hat Single Sign-On を使用して外部アイデンティティープロバイダーを仲介する場合に役立ちます。
Identity Broker Flow
- ユーザーは認証されず、クライアントアプリケーションで保護されたリソースを要求します。
- クライアントアプリケーションは、ユーザーを Red Hat Single Sign-On にリダイレクトして認証を行います。
- この時点では、ユーザーがレルムに設定されたアイデンティティープロバイダーの一覧があるログインページに表示されます。
- ユーザーは、該当するボタンまたはリンクをクリックし、アイデンティティープロバイダーの 1 つを選択します。
- Red Hat Single Sign-On は、認証を要求するターゲットアイデンティティープロバイダーへの認証要求を実行し、ユーザーはアイデンティティープロバイダーのログインページにリダイレクトされます。アイデンティティープロバイダーの接続プロパティーおよびその他の設定オプションは、以前は管理コンソールの管理者が設定されました。
- ユーザーは、アイデンティティープロバイダーでの認証を行うために、認証情報または応答を提供します。
- アイデンティティープロバイダーによる認証に成功すると、ユーザーは認証応答で Red Hat Single Sign-On にリダイレクトされます。この応答には、アイデンティティープロバイダーによって実行された認証を信頼し、ユーザーの情報を取得するために Red Hat Single Sign-On によって使用されるセキュリティートークンが含まれます。
- Red Hat Single Sign-On は、アイデンティティープロバイダーからの応答が有効かどうかをチェックします。有効な場合は、新規ユーザーをインポートして作成するか、ユーザーがすでに存在する場合のみを省略してください。Red Hat Single Sign-On が新しいユーザーである場合は、その情報がトークンに存在しない場合は、アイデンティティープロバイダーにユーザーについての情報が尋ねられることがあります。これは、アイデンティティーフェデレーションです。ユーザーが Red Hat Single Sign-On がすでに存在する場合は、アイデンティティープロバイダーから返されたアイデンティティーを既存のアカウントにリンクするよう要求します。このプロセスは、アカウントのリンク設定 と呼ばれています。次の作業は設定可能で、最初のログインフローで設定することで指定できます。この手順の最後で、Red Hat Single Sign-On がユーザーを認証し、サービスプロバイダーで要求されたリソースにアクセスするためにユーザーに認証し、独自のトークンを発行します。
- ユーザーをローカルで認証されたら、Red Hat Single Sign-On は、ローカル認証時に以前に発行されたトークンを送信することで、ユーザーをサービスプロバイダーにリダイレクトします。
- サービスプロバイダーは Red Hat Single Sign-On からトークンを受け取り、保護されたリソースへのアクセスを許可します。
このフローは、後で通信するいくつかのバリエーションがあります。たとえば、アイデンティティープロバイダーの一覧を表示する代わりに、クライアントアプリケーションは特定のプロバイダーを要求できます。または、Red Hat Single Sign-On に、ユーザーをユーザーを ID をフェデレーションする前に追加情報を提供できるように指示できます。
プロトコルによって異なる認証フローが必要になる場合があります。現時点では、Red Hat Single Sign-On でサポートされるすべてのアイデンティティープロバイダーは上記のフローを使用します。ただし、使用中のプロトコルに関係なく、ユーザーエクスペリエンスは非常に大きく行ってください。
ご覧のとおり、認証プロセスの最後に、Red Hat Single Sign-On は常に独自のトークンをクライアントアプリケーションに対して発行します。つまり、クライアントアプリケーションは、外部アイデンティティープロバイダーから完全に切り離されます。どのプロトコル (SAML、OpenID Connect、OAuth など) が使用されているか、またはユーザーのアイデンティティーが検証された方法を把握する必要はありません。Red Hat Single Sign-On を把握する必要があるのは、Red Hat Single Sign-On のみです。
12.2. デフォルトのアイデンティティープロバイダー
ログインフォームを表示する代わりに、アイデンティティープロバイダーに自動的にリダイレクトすることができます。管理コンソールの Authentication
ページに移動し、Browser
フローを選択します。次に、Identity Provider Redirector
オーセンティケーターの設定をクリックします。Default Identity Provider
を、ユーザーを自動的にリダイレクトする ID プロバイダーのエイリアスに設定します。
設定されたデフォルトのアイデンティティープロバイダーが見つからない場合は、代わりにログインフォームが表示されます。
このオーセンティケーターは、kc_idp_hint
クエリーパラメーターにも対応します。詳細は、「クライアント推奨される ID プロバイダー」のセクションを参照してください。
12.3. 一般的な設定
アイデンティティーブローカー設定は、ID プロバイダーをベースとしています。アイデンティティープロバイダーは各レルムに対して作成され、デフォルトでは各アプリケーションに対して有効になります。つまり、レルムからのユーザーは、アプリケーションへのサインイン時に登録されたいずれかのアイデンティティープロバイダーを使用できます。
ID プロバイダーを作成するには、左側のメニュー項目 Identity Providers
をクリックします。
ID プロバイダー
ドロップダウンリストで、追加する ID プロバイダーを選択します。これにより、アイデンティティープロバイダータイプの設定ページに移動します。
ID プロバイダーの追加
上記は、Google ソーシャルログインプロバイダーを設定する例です。IDP を設定すると、オプションとして Red Hat Single Sign-On ログインページに表示されます。
IDP ログインページ
- ソーシャル
- ソーシャルプロバイダーを使用すると、レルムでソーシャル認証を有効にできます。Red Hat Single Sign-On により、ユーザーはソーシャルネットワークのある既存のアカウントを使用してアプリケーションにログインすることが容易になります。現在サポートされるプロバイダーには、Twitter、Facebook、Google、LinkedIn、Instagram、Microsoft、PayPal、Openshift v3、GitHub、GitLab、Bitbucket、および Stack Overflow が含まれます。
- プロトコルベース
- プロトコルベースのプロバイダーは、ユーザーの認証および承認に特定のプロトコルに依存するものです。これにより、特定のプロトコルに準拠するアイデンティティープロバイダーに接続できます。Red Hat Single Sign-On は、SAML v2.0 プロトコルおよび OpenID Connect v1.0 プロトコルのサポートを提供します。これらのオープン標準に基づいてアイデンティティープロバイダーを簡単に設定し、ブローカーすることが容易になります。
それぞれの種類のアイデンティティープロバイダーには独自の設定オプションがありますが、それらはすべて非常に共通の設定を共有します。作成するアイデンティティープロバイダーに関係なく、以下の設定オプションを確認できます。
表12.1 共通の設定
設定 | 説明 |
---|---|
エイリアス |
エイリアスはアイデンティティープロバイダーの一意の ID です。これはアイデンティティープロバイダーを内部で参照するために使用されます。OpenID Connect などのプロトコルには、アイデンティティープロバイダーと通信するためにリダイレクト URI やコールバック URL が必要です。この場合、エイリアスはリダイレクト URI の構築に使用されます。単一のアイデンティティープロバイダーはすべてエイリアスが必要です。例として、 |
有効 | プロバイダーのオン/オフを切り替えます。 |
ログインページで非表示 | このスイッチがオンになると、ログインページにログインオプションとしてこのプロバイダーは表示されません。クライアントは、ログインの要求に使用する URL の 'kc_idp_hint' パラメーターを使用して、このプロバイダーの使用を引き続き要求できます。 |
アカウントのリンクのみ | このスイッチがオンの場合、このプロバイダーを使用してログインユーザーにはログインできず、ログインページのオプションとしては表示されません。ただし、既存のアカウントをこのプロバイダーにリンクできます。 |
トークンの保存 | アイデンティティープロバイダーから受け取ったトークンを保存するかどうか。 |
保存されたトークンの読み取り可能 | ユーザーが保存されたアイデンティティープロバイダートークンを取得できるかどうか。これは、broker クライアントレベルのロール read token にも適用されます。 |
信頼メール | アイデンティティープロバイダーがメールアドレスを提供する場合は、このメールアドレスが信頼されます。レルムにメール検証が必要な場合、この IDP からログインするユーザーはメールの検証プロセスを行う必要はありません。 |
GUI 順序 | ログインページに、利用可能な IDP がどのように表示されているかを並べ替える注文番号。 |
最初のログインフロー | これは、この IDP を初めてログインしたときに Red Hat Single Sign-On にログインするユーザーにトリガーされる認証フローです。 |
ログイン後のフロー | ユーザーが外部アイデンティティープロバイダーでのログインを終了するとトリガーされる認証フロー。 |
12.4. ソーシャルアイデンティティープロバイダー
インターネット向けのアプリケーションでは、ユーザーがアクセスを取得するためにサイトに登録できるように非常にリスクがあります。別のユーザー名とパスワードの組み合わせを覚えておく必要があります。ソーシャルアイデンティティープロバイダーを使用すると、ユーザーがアカウントがすでに持っている可能性のあるセミコロンの信頼されているエンティティーに認証を委譲できます。Red Hat Single Sign-On は、Google、Facebook、Twitter、GitHub、LinkedIn、Microsoft および Stack Overflow などの最も一般的なソーシャルネットワークの組み込みサポートを提供します。
12.4.1. Bitbucket
Bitbucket を使用したログインを有効にするためには、多くの手順を完了する必要があります。
まず、左側のメニュー項目 Identity Providers
開き、Add provider
ドロップダウンリストから Bitbucket
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
Save
をクリックする前に、Bitbucket から Client ID
および Client Secret
を取得する必要があります。
このページの Redirect URI
は後のステップで使用します。この URI は、Red Hat Single Sign-On をクライアントとして登録する際に GitLab に提供します。
新規アプリケーションの追加
Bitbucket でのログインを有効にするには、最初に Bitbucket Cloud の OAuth にアプリケーションプロジェクトを登録する必要があります。
Bitbucket は多くの場合、アプリケーション登録の外観と操作感を変更する可能性があるため、Bitbucket サイトに表示される内容が異なる場合があります。不明な場合には、Bitbucket ドキュメントを参照してください。
Add consumer
ボタンをクリックします。
アプリケーションの登録
Red Hat Single Sign-On Add Identity Provider
ページから Redirect URI
をコピーし、Bitbucket Add OAuth Consumer ページの Callback URL フィールドに入力します。
同じページで、Account
の下の Email
および Read
ボックスにマークを付け、アプリケーションがユーザーのメールを読み取ることを許可します。
Bitbucket アプリケーションページ
登録が完了したら、Save
をクリックします。これにより、Bitbucket でアプリケーション管理ページが開きます。このページからクライアント ID とシークレットを検索し、Red Hat Single Sign-On の Add identity provider
ページにそのクライアント ID とシークレットを入力できます。Save
をクリックします。
12.4.2. Facebook
Facebook を使用したログインを有効にするためには、多くの手順を完了する必要があります。まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから Facebook
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
Facebook から Client ID
および Client Secret
を取得する必要があるため、まだ保存はクリックできません。このページが必要とするデータの 1 つが Redirect URI
です。Red Hat Single Sign-On をクライアントとして登録する際にそれを Facebook に提供する必要があるため、この URI をクリップボードにコピーします。
ログインを有効にするには、最初に Facebook Developer Console でプロジェクトとクライアントを作成する必要があります。
Facebook は多くの場合、Facebook Developer Console の外観と操作感を変更する可能性があるため、これらの方向は常に最新の状態で、設定手順が若干異なる場合があります。
コンソールにログインしたら、My Apps
という画面の右上にあるプルダウンメニューが表示されます。Add a New App
メニュー項目を選択します。
新規アプリケーションの追加
Website
アイコンを選択します。Skip and Create App ID
ボタンをクリックします。
新規アプリケーション ID の作成
メールアドレスとアプリケーションカテゴリーは必須フィールドです。この作業が完了したら、アプリケーションのダッシュボードに移動します。左側のメニュー項目の Settings
をクリックします。
新規アプリケーション ID の作成
このページの最後にある + Add Platform
ボタンをクリックし、Website
アイコンを選択します。Red Hat Single Sign-On の Add identity provider
ページから、Facebook の Website
設定ブロックの Site URL
に Redirect URI
をコピーアンドペーストします。
Web サイトの指定
その後、Facebook app public を作成する必要があります。左メニューの項目の App Review
をクリックし、ボタンを "Yes" に切り替えます。
このページから App ID および App Secret を取得して、Red Hat Single Sign-On の Add identity provider
ページを入力する必要もあります。これを取得するには、左側のメニュー項目 Dashboard
をクリックし、App Secret
の下にある Show
をクリックします。Red Hat Single Sign-On に戻り、それらの項目を指定し、最後に Facebook Identity Provider を保存します。
Facebook の Add identity provider
ページで注意する設定オプションの 1 つが Default Scopes
フィールドです。このフィールドでは、このプロバイダーでの認証時にユーザーが承認する必要のあるスコープを手動で指定することができます。スコープの全一覧については、https://developers.facebook.com/docs/graph-api を参照してください。デフォルトでは、Red Hat Single Sign-On は email
の範囲を使用します。
12.4.3. GitHub
GitHub でログインを有効にするために実行する必要のある手順が複数あります。まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから GitHub
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
GitHub から Client ID
および Client Secret
を取得する必要があるため、Save はクリックできません。このページが必要とするデータの 1 つが Redirect URI
です。Red Hat Single Sign-On をクライアントとして登録する際にそれを GitHub に提供する必要があるため、この URI をクリップボードにコピーします。
GitHub でのログインを有効にするには、まず GitHub Developer アプリケーション でアプリケーションプロジェクトを登録する必要があります。
GitHub は、アプリケーション登録の外観と操作感を変更することが多く、これらの対象は最新の状態で、設定手順が若干異なる場合があります。
新規アプリケーションの追加
Register a new application
をクリックします。
アプリケーションの登録
Red Hat Single Sign-On の Add Identity Provider
ページから Redirect URI
をコピーし、GitHub の Register a new OAuth application
ページの Authorization callback URL
フィールドに入力する必要があります。このページの完了後、アプリケーションの管理ページに移動します。
GitHub アプリケーションページ
このページからクライアント ID およびシークレットを取得する必要があります。これにより、Red Hat Single Sign-On の Add identity provider
ページでクライアント ID とシークレットを入力できます。Red Hat Single Sign-On に戻り、その項目を指定します。
12.4.4. GitLab
GitLab でログインを有効にするために実行する必要のある手順が複数あります。
まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから GitLab
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
Save
をクリックする前に、GitLab から Client ID
および Client Secret
を取得する必要があります。
このページの Redirect URI
は後のステップで使用します。この URI は、Red Hat Single Sign-On をクライアントとして登録する際に GitLab に提供します。
GitLab でログインを有効にするには、まず GitLab でアプリケーションを OAuth2 認証サービスプロバイダーとして登録する必要があります。
GitLab は、アプリケーション登録の外観と操作感を変更することが多く、GitLab サイトに表示される内容が異なる場合があります。疑問がある場合は、GitLab ドキュメントを参照してください。
新規アプリケーションの追加
Red Hat Single Sign-On の Add Identity Provider
ページから Redirect URI
をコピーし、GitLab Add 新規アプリケーションページの Redirect URI フィールドにその URI を入力します。
GitLab App ページ
登録が完了したら、Save application
をクリックします。これにより、GitLab でアプリケーション管理ページが開きます。このページからクライアント ID とシークレットを検索し、Red Hat Single Sign-On の Add identity provider
ページにそのクライアント ID とシークレットを入力できます。
終了するには、Red Hat Single Sign-On に戻り、そのクライアント ID とシークレットを入力します。Save
をクリックします。
12.4.5. Google
Google でログインを有効にするために実行する必要のある手順が複数あります。まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから Google
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
Google から クライアント ID
および クライアントシークレット
を取得する必要があるため、保存はクリックできません。このページが必要とするデータの 1 つが Redirect URI
です。Red Hat Single Sign-On をクライアントとして登録する際にそれを Google に提供する必要があるため、この URI をクリップボードにコピーします。
Google でログインを有効にするには、最初に Google Developer Console でプロジェクトとクライアントを作成する必要があります。クライアント ID およびシークレットを Red Hat Single Sign-On 管理コンソールにコピーする必要があります。
Google は多くの場合、Google Developer Console の外観と操作感を変更する可能性があるため、これらの方向は常に最新の状態で、設定手順が若干異なる場合があります。
まず、Google でプロジェクトを作成する方法を説明します。
Google Developer Console にログインします。
Google 開発者コンソール
Create Project
ボタンをクリックします。Project name
と Project ID
に任意の値を使用してから Create
ボタンをクリックします。プロジェクトが作成されるまで待機します (しばらく時間がかかる場合があります)。作成されると、プロジェクトのダッシュボードに移動します。
ダッシュボード
次に、Google Developer Console の API & Services
セクションに移動します。この画面で、Credentials
の管理 に移動します。
Red Hat Single Sign-On から Google にログインすると、Google から consent 画面が表示され、Red Hat Single Sign-On がユーザープロファイルの情報を表示できるかどうかをユーザーに尋ねます。そのため、Google では、シークレットを作成する前に製品に関する基本的な情報が必要になります。新規プロジェクトでは、OAuth consent screen
を設定しておく必要があります。
非常に基本的な設定では、アプリケーション名を入力します。また、このページの Google API のスコープなどの追加情報を設定することもできます。
OAuth consent screen details
次の手順では、OAuth クライアント ID およびクライアントシークレットを作成します。Credentials
管理に戻り、Credentials
タブに移動し、Create credentials
ボタンの下にある OAuth client ID
を選択します。
認証情報の作成
その後、Create OAuth client ID
ページに移動します。アプリケーションタイプとして Web application
を選択します。クライアントの名前を指定します。Redirect URI
を Red Hat Single Sign-On の Add Identity Provider
ページから Authorized redirect URIs
フィールドにコピーアンドペーストする必要があります。この作業を行ったら、Create
ボタンをクリックします。
OAuth クライアント ID の作成
Create
をクリックすると、Credentials
ページに移動します。新しい OAuth 2.0 Client ID をクリックし、新しい Google Client の設定を表示します。
Google クライアント認証情報
このページからクライアント ID およびシークレットを取得する必要があります。これにより、Red Hat Single Sign-On の Add identity provider
ページでクライアント ID とシークレットを入力できます。Red Hat Single Sign-On に戻り、その項目を指定します。
Google の Add identity provider
ページで注意する設定オプションの 1 つが Default Scopes
フィールドです。このフィールドでは、このプロバイダーでの認証時にユーザーが承認する必要のあるスコープを手動で指定することができます。スコープの全一覧については、https://developers.google.com/oauthplayground/ を参照してください。デフォルトでは、Red Hat Single Sign-On は openid
、profile
、email
のスコープを使用します。
組織が G Suite を使用し、組織のメンバーのみへのアクセスを制限する場合には、Hosted Domain
フィールドに G Suite に使用されるドメインを入力してこれを有効にする必要があります。
12.4.6. LinkedIn
LinkedIn でログインを有効にするために実行する必要のある手順が複数あります。まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから LinkedIn
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
Client ID
および Client Secret
を LinkedIn から取得する必要があるため、まだ保存をクリックします。このページが必要とするデータの 1 つが Redirect URI
です。Red Hat Single Sign-On をクライアントとして登録する際に LinkedIn が提供されるため、この URI をクリップボードにコピーする必要があります。
LinkedIn でログインを有効にするには、まず LinkedIn Developer Network でアプリケーションを作成する必要があります。
LinkedIn はアプリケーション登録の外観と操作感を変更する可能性があるため、これらの方向は常に最新の状態であるとは限りません。
Developer Network
Create Application
ボタンをクリックします。これにより、Create a New Application
ページが表示されます。
アプリケーションの作成
フォームに適切な値を入力し、Submit
ボタンをクリックします。これにより、新規アプリケーションの設定ページに移動します。
アプリケーション設定
Default Application Permissions
セクションで、r_basicprofile
および r_emailaddress
を選択します。Red Hat Single Sign-On の Add Identity Provider
ページから Redirect URI
をコピーして、LinkedIn アプリケーション設定ページの OAuth 2.0
Authorized Redirect URLs
フィールドに入力する必要があります。この作業を行ったら、忘れずに Update
ボタンをクリックしてください。
次に、このページからクライアント ID およびシークレットを取得する必要があります。これにより、Red Hat Single Sign-On の Add identity provider
ページでクライアント ID とシークレットを入力できます。Red Hat Single Sign-On に戻り、その項目を指定します。
12.4.7. Microsoft
Microsoft へのログインを有効にするには、完了する必要がある多くの手順があります。まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから Microsoft
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
Microsoft から Client ID
および Client Secret
を取得する必要があるため、保存はクリックできません。このページが必要とするデータの 1 つが Redirect URI
です。Red Hat Single Sign-On をクライアントとして登録する際に、Microsoft に提供する必要があります。したがって、この URI をクリップボードにコピーする必要があります。
Microsoft アカウントを使用したログインを有効にするには、まず OAuth アプリケーションを Microsoft に登録する必要があります。URL Microsoft Application Registration に移動します。
Microsoft は、アプリケーション登録の外観と操作感を変更することが多く、これらの対象は最新の状態で、設定手順が若干異なる場合があります。
アプリケーションの登録
アプリケーション名を入力し、Create application
をクリックします。これにより、新規アプリケーションのアプリケーション設定ページに移動します。
設定
Red Hat Single Sign-On の Add Identity Provider
ページから Redirect URI
をコピーし、Microsoft アプリケーションページの Redirect URIs
フィールドに追加する必要があります。Add Url
ボタンをクリックし、変更を 保存
します。
最後に、このページからアプリケーション ID とシークレットを取得する必要があります。これにより、Red Hat Single Sign-On の Add identity provider
ページに戻すことができます。Red Hat Single Sign-On に戻り、その項目を指定します。
2018 年 11 月以降、Microsoft は新しい Microsoft Graph API を優先して、ライブ SDK API のサポートを削除しています。Red Hat Single Sign-On の Microsoft アイデンティティープロバイダーが新しいエンドポイントを使用するように更新され、このプロバイダーを使用できるように Red Hat Single Sign-On バージョン 7.2.5 以降にアップグレードしてください。Microsoft に「Live SDK applications」の下に登録されているクライアントアプリケーションは、Microsoft Graph API と互換性のあるアプリケーション ID を取得するために、Microsoft Application Registration ポータルで再登録する必要があります。
12.4.8. OpenShift 3
現時点で、OpenShift Online は開発者プレビューモードです。本書は、オンプレミスインストールおよびローカルの minishift
開発環境に基づいています。
OpenShift でログインを有効にするために実行する必要のある手順をいくつか紹介します。まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから OpenShift
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
OAuth クライアントの登録
oc
コマンドラインツールを使用してクライアントを登録できます。
$ oc create -f <(echo ' kind: OAuthClient apiVersion: v1 metadata: name: kc-client 1 secret: "..." 2 redirectURIs: - "http://www.example.com/" 3 grantMethod: prompt 4 ')
- 1
- OAuth クライアントの
名前
。<openshift_master>/oauth/authorize
および<openshift_master>/oauth/token
への要求の実行時にclient_id
要求パラメーターとして渡されます。 - 2
secret
はclient_secret
要求パラメーターとして使用されます。- 3
<openshift_master>/oauth/authorize
および<openshift_master>/oauth/token
への要求で指定されるredirect_uri
パラメーターは、redirectURIs
のいずれかの URI と同じ (または接頭辞が付けられた) 必要があります。- 4
grantMethod
は、このクライアントがトークンを要求し、ユーザーがアクセスを付与していない場合に実行するアクションを判別するために使用されます。
oc create
コマンドで定義されるクライアント ID およびシークレットを使用して、Red Hat Single Sign-On の Add identity provider
プロバイダーページで再度入力します。Red Hat Single Sign-On に戻り、その項目を指定します。
詳細ガイドは、公式の OpenShift ドキュメントを参照してください。
12.4.9. OpenShift 4
OpenShift 4 アイデンティティープロバイダーを設定する前に、正しい OpenShift 4 API URL を確認してください。シナリオによっては、その URL はユーザーから非表示にされる可能性があります。このコマンドを取得する最も簡単な方法は、コマンド curl -s -k -H "Authorization: Bearer $(oc whoami -t)" https://<openshift-user-facing-api-url>/apis/config.openshift.io/v1/infrastructures/cluster | jq ".status.apiServerURL"
を実行することです (これには jq
コマンドを個別にインストールすることが必要になる場合があります)。多くの場合、アドレスは HTTPS によって保護されます。そのため、コンテナーで X509_CA_BUNDLE
を設定し、これを /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
に設定する必要があります。それ以外の場合は、Red Hat Single Sign-On は API サーバーと通信できません。
OpenShift 4 でログインを有効にするためにには、いくつかの手順を実行する必要があります。まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから OpenShift v4
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
OAuth クライアントの登録
oc
コマンドラインツールを使用してクライアントを登録できます。
$ oc create -f <(echo ' kind: OAuthClient apiVersion: v1 metadata: name: keycloak-broker 1 secret: "..." 2 redirectURIs: - "<copy pasted Redirect URI from OpenShift 4 Identity Providers page>" 3 grantMethod: prompt 4 ')
- 1
- OAuth クライアントの
名前
。<openshift_master>/oauth/authorize
および<openshift_master>/oauth/token
への要求の実行時にclient_id
要求パラメーターとして渡されます。name
パラメーターは、OAuthClient
オブジェクトと Red Hat Single Sign-On 設定で同じである必要があります。 - 2
secret
はclient_secret
要求パラメーターとして使用されます。- 3
<openshift_master>/oauth/authorize
および<openshift_master>/oauth/token
への要求で指定されるredirect_uri
パラメーターは、redirectURIs
のいずれかの URI と同じ (または接頭辞が付けられた) 必要があります。これを正しく設定する最も簡単な方法は、Red Hat Single Sign-On OpenShift 4 Identity Provider 設定ページから (Redirect URI
フィールド) コピーすることです。- 4
grantMethod
は、このクライアントがトークンを要求し、ユーザーがアクセスを付与していない場合に実行するアクションを判別するために使用されます。
oc create
コマンドで定義されるクライアント ID とシークレットを使用して、Red Hat Single Sign-On の Add identity provider
ページで再度入力します。Red Hat Single Sign-On に戻り、その項目を指定します。
OpenShift API サーバーは、OAuthClient
の name
、secret
、または redirectURIs
が正しくない場合は、The client is not authorized to request a token using this method
を返します。クローンした内容を Red Hat Single Sign-On OpenShift 4 Identity Provider ページに正しくコピーしてください。
詳細ガイドは、公式の OpenShift ドキュメントを参照してください。
12.4.10. PayPal
PayPal でログインを有効にするには、完了している手順が複数あります。まず、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから PayPal
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
まだ保存することはできません。これは、PayPal からClient ID
および Client Secret
を取得する必要はないためです。このページが必要とするデータの 1 つが Redirect URI
です。Red Hat Single Sign-On をクライアントとして登録する際にそれを PayPal に提供する必要があるため、この URI をクリップボードにコピーします。
PayPal でログインを有効にするには、まず PayPal Developer アプリケーション でアプリケーションプロジェクトを登録する必要があります。
新規アプリケーションの追加
Create App
ボタンをクリックします。
アプリケーションの登録
これで、アプリケーション設定ページに移動します。
以下の変更を加えます。
-
Sandbox または Live のいずれかを設定します (
Add identity provider
ページのTarget Sandbox
スイッチを有効にしていない場合は Live を選択します)。 -
Red Hat Single Sign-On の
Add identity provider
ページに貼り付けるように、クライアント ID およびシークレットをコピーします。 -
App Settings
までスクロールダウン -
Red Hat Single Sign-On の
Add Identity Provider
ページからRedirect URI
をコピーし、Return URL
フィールドに入力します。 -
Log In with PayPal
チェックボックスを選択します。 -
個人情報セクションの
Full name
チェックボックスを確認します。 -
アドレス情報 セクションの下にある
Email address
チェックボックスを確認します。 - ドメインの該当ページを参照するプライバシーとユーザー合意 URL の両方を追加します。
12.4.11. Stack Overflow
Stack Overflow でログインを有効にするには、完了すべき多くのステップがあります。まず、Identity Providers
の左側のメニュー項目に移動し 、Add provider
ドロップダウンリストから Stack Overflow
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
Stack Overflow でログインを有効にするには、最初に StackApps で OAuth アプリケーションを登録する必要があります。Stack Apps URL およびログインでアプリケーションを登録します。
スタックのオーバーコミットにより、アプリケーション登録の外観と操作感が変更されることが多く、これらの方向は常に最新の状態で、設定の手順が若干異なる場合があります。
アプリケーションの登録
アプリケーション名とアプリケーションの OAuth ドメイン名を入力し、Register your Application
をクリックします。他の項目に必要なものを入力します。
設定
最後に、このページからクライアント ID、シークレット、およびキーを取得し、Red Hat Single Sign-On Add Add identity provider
にそれを戻す必要があります。Red Hat Single Sign-On に戻り、その項目を指定します。
12.4.12. Twitter
Twitter でログインを有効にするために必要な多くのステップがあります。最初に、Identity Providers
の左側のメニュー項目に移動し、Add provider
ドロップダウンリストから Twitter
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
まだ保存することはできません。これは、Twitter から Client ID
および Client Secret
を取得する必要はないためです。このページが必要とするデータの 1 つが Redirect URI
です。Red Hat Single Sign-On をクライアントとして登録する際にそれを Twitter に提供する必要があるため、この URI をクリップボードにコピーします。
Twitter によるログインを有効にするには、最初に Twitter Application Management でアプリケーションを作成する必要があります。
アプリケーションの登録
Create New App
ボタンをクリックします。これにより Create an Application
ページが表示されます。
アプリケーションの登録
Name および Description を入力します。Web サイトは任意に指定できますが、localhost
アドレスを持つことはできません。Callback URL
の場合は、Red Hat Single Sign-On の Add Identity Provider
ページから Redirect URI
をコピーする必要があります。
Callback URL
で localhost
を使用することはできません。代わりに、ラップトップで Twitter ログインをテストする場合は 127.0.0.1
に置き換えてください。
保存をクリックしたら、Details
ページに移動します。
アプリケーションの詳細
次に Keys and Access Tokens
タブに移動します。
キーおよびアクセストークン
最後に、このページから API キーとシークレットを取得し、それらを Red Hat Single Sign-On の Add identity provider
ページの Client ID
および Client Secret
フィールドにコピーする必要があります。
12.4.13. Instagram
Instagram でログインを有効にするために必要な多くのステップがあります。最初に、Identity Providers
の左側のメニュー項目に移動し、Add provider
ドロップダウンリストから Instagram
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
まだ保存することはできません。これは、Instagram からClient ID
および Client Secret
を取得する必要はないためです。このページが必要とするデータの 1 つが Redirect URI
です。Red Hat Single Sign-On をクライアントとして登録する際にそれを Instagram に提供する必要があるため、この URI をクリップボードにコピーします。
Instagram でログインを有効にするには、まずプロジェクトおよびクライアントを作成する必要があります。Instagram API は、Facebook Developer Console で管理されます。
Facebook は多くの場合、Facebook Developer Console の外観と操作感を変更する可能性があるため、これらの方向は常に最新の状態で、設定手順が若干異なる場合があります。
コンソールにログインしたら、My Apps
という画面の右上にあるメニューが表示されます。Add a New App
メニュー項目を選択します。
新規アプリケーションの追加
For Everything Else
を選択します。
新規アプリケーション ID の作成
すべての必須フィールドを入力します。この作業が完了したら、アプリケーションのダッシュボードに移動します。左側のナビゲーションパネルのメニューで、Settings
で Basic
を選択します。
プラットフォームの追加
下部の + Add Platform
を選択し、globe
アイコンで [Website] をクリックします。サイトの URL を指定します。
製品の追加
左側のメニューから Dashboard
を選択し、Instagram ボックスで Set Up
をクリックします。左側のメニューで Instagram
で Basic Display
を選択し、Create New App
をクリックします。
新規 Instagram アプリケーション ID の作成
Display Name
を指定します。
アプリケーションの設定
Red Hat Single Sign-On の Add identity provider
ページから、Instagram Client OAuth Settings
設定ブロックの Valid OAuth Redirect URIs
に Redirect URI
をコピーアンドペーストします。
この URL は Deauthorize Callback URL
および Data Deletion Request URL
にも使用できます。Red Hat Single Sign-On は現在、それらのいずれかをサポートしていませんが、Facebook Developer Console には両方の入力が必要です。
このページから App ID および App Secret を取得して、Red Hat Single Sign-On の Add identity provider
ページを入力する必要もあります。この項目を取得するには、App Secret
の Show
をクリックします。Red Hat Single Sign-On に戻り、それらの項目を指定し、最後に Instagram Identity Provider を保存します。
その後、Instagram アプリケーションを公開する必要があります。左のメニューの App Review
をクリックしてから Requests
をクリックします。その後、画面の指示に従います。
12.5. OpenID Connect v1.0 アイデンティティープロバイダー
Red Hat Single Sign-On は、OpenID Connect プロトコルに基づいてブローカーアイデンティティープロバイダーを使用できます。ユーザーの認証およびアクセスを承認するには、これらの IDP は仕様によって定義された Authorization Code Flow をサポートする必要があります。
OIDC プロバイダーの設定を開始するには、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから OpenID Connect v1.0
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
このページの初期設定オプションは、「一般的な IDP 設定」に記載されています。OpenID Connect 設定オプションも定義する必要があります。これらは、通信している OIDC IDP を定期的に説明しています。
表12.2 OpenID Connect の設定
設定 | 説明 |
---|---|
認証 URL | OIDC プロトコルで必要な承認 URL エンドポイント。 |
トークン URL | OIDC プロトコルで必要なトークン URL エンドポイント。 |
ログアウト URL | OIDC プロトコルで定義された URL エンドポイントをログアウトします。この値はオプションです。 |
バックチャネルログアウト | Backchannel ログアウトは、バックグラウンド (アウトオブバウンド) IDP への REST 呼び出しで、ユーザーをログアウトします。一部の IDP はブラウザークッキーを介してアイデンティティーセッションのみにアクセスできる可能性があるため、ブラウザーリダイレクトによってログアウトのみを実行できます。 |
ユーザー情報 URL | OIDC プロトコルで定義されたユーザー Info URL エンドポイント。これは、ユーザープロファイルの情報をダウンロードできるエンドポイントです。 |
クライアント認証 | Authorization Code Flow で使用するクライアント認証メソッドの定義に切り替えます。秘密鍵で署名される JWT の場合、レルムの秘密鍵が使用されます。他の場合は、クライアントシークレットを定義する必要があります。詳細は、「Client Authentication specifications」を参照してください。 |
クライアント ID | このレルムは、外部 IDP への OIDC クライアントとして機能します。Authorization Code Flow を使用して外部 IDP と対話する場合は、レルムに OIDC クライアント ID が必要です。 |
Client Secret | このレルムは、Authorization Code Flow を使用する場合に使用するクライアントシークレットが必要です。このフィールドの値は、外部 vault からの値を参照できます。 |
issuer | IDP からの応答には発行者クレームが含まれる可能性があります。この設定値はオプションです。これが指定されている場合、この要求は指定した値に対して検証されます。 |
Default Scopes |
認証要求で送信する OIDC スコープのスペース区切りの一覧。デフォルトは |
Prompt | 他の任意のスイッチ。これは OIDC 仕様で定義されているプロンプトパラメーターです。これにより、再認証やその他のオプションを強制的に実行できます。詳細は、仕様を参照してください。 |
クライアントからの prompt=none forward を許可します。 |
IDP が、prompt=none クエリーパラメーターを含む転送された認証要求を受け入れるかどうかを指定します。レルムが
ユーザーが IDP で認証されていない場合は、クライアントは |
署名の検証 | 他の任意のスイッチ。これは、Red Hat Single Sign-On がこのアイデンティティープロバイダーによって署名された外部 ID トークンで署名を検証するかどうかを指定します。これがオンの場合、Red Hat Single Sign-On は外部 OIDC アイデンティティープロバイダーを把握しておく必要があります。設定方法については、以下を参照してください。警告: パフォーマンスの目的で、Red Hat Single Sign-On は外部 OIDC アイデンティティープロバイダーの公開鍵をキャッシュします。クライアントアイデンティティープロバイダーの秘密鍵が危険にさらされたと思われる場合は、キーの更新は明らかですが、キーの更新も適切です。詳細は、「キャッシュの消去」セクションを参照してください。 |
JWKS URL の使用 |
|
JWKS URL |
ID プロバイダーの JWK キーが保存される URL。詳細は、「JWK 仕様」を参照してください。外部 Red Hat Single Sign-On を ID プロバイダーとして使用する場合は、http://broker-keycloak:8180 でブローカー設定された Red Hat Single Sign-On が実行していて、そのレルムが |
公開鍵の検証 |
|
公開鍵 ID の検証 |
|
OpenID プロバイダーメタデータをポイントする URL またはファイルを指定してこの設定データをすべてインポートすることもできます (OIDC 検出仕様を参照)。Red Hat Single Sign-On 外部 IDP に接続する場合は、URL <root>/auth/realms/{realm-name}/.well-known/openid-configuration
から IDP 設定をインポートできます。このリンクは、IDP に関するメタデータを記述する JSON ドキュメントです。
12.6. SAML v2.0 アイデンティティープロバイダー
Red Hat Single Sign-On は、SAML v2.0 プロトコルに基づいてブローカーアイデンティティープロバイダーを使用できます。
SAML v2.0 プロバイダーの設定を開始するには、左側のメニュー項目 Identity Providers
に移動し、Add provider
ドロップダウンリストから SAML v2.0
を選択します。これにより、Add identity provider
ページが表示されます。
ID プロバイダーの追加
このページの初期設定オプションは、「一般的な IDP 設定」に記載されています。SAML 設定オプションも定義する必要があります。このユーザーは、基本的に通信している SAML IDP について説明しています。
表12.3 SAML 設定
設定 | 説明 |
---|---|
サービスプロバイダーエンティティー ID |
これは必須フィールドで、リモートアイデンティティープロバイダーがこのサービスプロバイダーからのリクエストを識別するために使用する SAML エンティティー ID を指定します。デフォルトでは、レルムベース URL |
Single Sign-On Service URL | これは必須フィールドで、認証プロセスを開始する SAML エンドポイントを指定します。SAML IDP が IDP エンティティー記述子を公開する場合、このフィールドの値はそこで指定します。 |
単一のログアウトサービス URL | これは、SAML ログアウトエンドポイントを指定する任意のフィールドです。SAML IDP が IDP エンティティー記述子を公開する場合、このフィールドの値はそこで指定します。 |
バックチャネルログアウト | SAML IDP がバックチャネルログアウトに対応しているかどうかを有効にします。 |
NameID のポリシー形式 |
名前識別子の形式に対応する URI 参照を指定します。デフォルトは |
プリンシパルタイプ | 外部ユーザー ID の特定および追跡に使用される SAML アサーションの一部を指定します。Subject NameID または SAML 属性のいずれかを指定できます (名前または分かりやすい名前のいずれか)。 |
Principal 属性 | Principal が "Attribute [Name]" または "Attribute [Friendly Name]" のいずれかに設定されている場合、このフィールドは、識別属性の名前または分かりやすい名前を指定します。 |
HTTP-POST バインディング応答 |
このレルムは外部 IDP によって送信された SAML 要求に応答すると、SAML バインディングを使用する必要があるか。 |
AuthnRequest の HTTP-POST バインディング |
このレルムが外部 SAML IDP から認証を要求すると、SAML バインディングを使用する必要がありますか? |
Want AuthnRequests Signed | true の場合、レルムのキーペアを使用して、外部 SAML IDP に送信される要求に署名します。 |
署名アルゴリズム |
|
SAML 署名キー名 |
署名付き SAML ドキュメントには、POST バインディング経由で送信される署名済みのほか、 |
認証の強制 | ユーザーがすでにログインされていても、外部 IDP で認証情報の入力を強制されることを示します。 |
署名の検証 | レルムが外部 IDP からの SAML 要求および応答にデジタル署名されることが予想されるかどうか。有効にすることを強くお勧めします。 |
X509 証明書の検証 | SAML 要求の署名および外部 IDP からの応答の検証に使用されるパブリック証明書。 |
OpenID プロバイダーメタデータをポイントする URL またはファイルを指定してこの設定データをすべてインポートすることもできます (OIDC 検出仕様を参照)。Red Hat Single Sign-On の外部 IDP に接続する場合は、URL <root>/auth/realms/{realm-name}/protocol/saml/descriptor
から IDP 設定をインポートできます。このリンクは、IDP に関するメタデータを記述する XML ドキュメントです。
接続する外部 SAML IDP のエンティティー記述子を参照する URL または XML ファイルを指定して、この設定データをすべてインポートすることもできます。
12.6.1. SP 記述子
SAML プロバイダーを作成すると、そのプロバイダーを表示するときに表示される EXPORT
ボタンがあります。このボタンをクリックすると、外部 SP へのインポートに使用できる SAML SP エンティティー記述子が削除されます。
このメタデータは、URL に移動することで公開されています。
http[s]://{host:port}/auth/realms/{realm-name}/broker/{broker-alias}/endpoint/descriptor
12.7. クライアント提案されたアイデンティティープロバイダー
OIDC アプリケーションは、使用するアイデンティティープロバイダーのヒントを指定することで、Red Hat Single Sign-On ログインページをバイパスできます。
これには、Authorization Code Flow 承認エンドポイントに kc_idp_hint
クエリーパラメーターを設定します。
Red Hat Single Sign-On OIDC クライアントアダプターを使用すると、アプリケーションでセキュアなリソースにアクセスすると、このクエリーパラメーターを指定できます。
以下に例を示します。
GET /myapplication.com?kc_idp_hint=facebook HTTP/1.1 Host: localhost:8080
この場合、レルムにエイリアス facebook
を持つアイデンティティープロバイダーが含まれることが予想されます。このプロバイダーが存在しない場合はログインフォームが表示されます。
keycloak.js
アダプターを使用している場合は、同じ動作を実行することもできます。
var keycloak = new Keycloak('keycloak.json'); keycloak.createLoginUrl({ idpHint: 'facebook' });
また、kc_idp_hint
クエリーパラメーターを使用すると、Identity Provider Redirector
のオーセンティケーター用に設定されている場合、クライアントはデフォルトのアイデンティティープロバイダーを上書きできるようにします。また、クライアントは kc_idp_hint
クエリーパラメーターを空の値に設定することで、自動リダイレクトを無効にすることもできます。
12.8. クレームとアサーションのマッピング
レルムの環境に認証する外部 IDP が提供する SAML および OpenID Connect メタデータをインポートできます。これにより、ユーザープロファイルのメタデータやその他の情報を取得でき、アプリケーションが利用できるようにすることができます。
外部アイデンティティープロバイダー経由でレルムにログインする各新規ユーザーには、SAML または OIDC アサーションおよび要求からのメタデータに基づいて、ローカルの Red Hat Single Sign-On データベースで作成されるエントリーがあります。
レルムの Identity Providers
ページに記載されている ID プロバイダーをクリックすると、IDP の Settings
タブに移動します。このページには Mappers
タブもあります。そのタブをクリックして、受信 IDP メタデータのマッピングを開始します。
このページには Create
ボタンがあります。この作成 ボタンをクリックすると、ブローカーマッパーを作成できます。ブローカーマッパーは SAML 属性または OIDC ID/アクセストークン要求をユーザー属性とユーザーロールマッピングにインポートできます。
Mapper Type
リストからマッパーを選択します。ツールチップにマウスをかざして、マッパーの機能の説明を表示します。ツールチップは、入力する必要のある設定情報についても説明します。Save
をクリックすると、新しいマッパーが追加されます。
JSON ベースの要求では、ドット表記を使用して、インデックスでアレイフィールドにアクセスするため、ネスト化と角括弧を使用します。たとえば、'contact.address[0].country' です。
ソーシャルプロバイダーが提供するユーザープロファイル JSON データの構造を調べるには、DEBUG
レベルのロガー org.keycloak.social.user_profile_dump
を有効にします。これは、サーバーの app-server 設定ファイル (domain.xml または standalone.xml) で実行されます。
12.9. 利用可能なユーザーセッションデータ
ユーザーが外部 IDP からログインした後に、Red Hat Single Sign-On ストアがアクセスできるユーザーセッションに関する追加のメモデータがあります。このデータは、適切なクライアントマッパーを使用してトークンまたは SAML アサーションを介してログインを要求するクライアントに伝播できます。
- identity_provider
- これは、ログインの実行に使用されるブローカーの IDP エイリアスです。
- identity_provider_identity
-
これは、現在認証されたユーザーの IDP ユーザー名です。これは多くの場合、Red Hat Single Sign-On のユーザー名と同じですが、必ずしもリリースされるとは限りません。たとえば、Red Hat Single Sign-On のユーザー
john
は、Facebook ユーザーjohn123@gmail.com
にリンクできるため、その場合、ユーザーセッションノートの値はjohn123@gmail.com
になります。
User Session Note
型のプロトコルマッパーを使用して 、この情報をクライアントに伝播することに注意してください。
12.10. 最初のログインフロー
ユーザーが ID ブローカーでログインすると、ユーザーのローカルデータベースがインポートされ、リンクされます。Red Hat Single Sign-On が外部アイデンティティープロバイダー経由でユーザーを認証した場合、2 つの状況が考えられます。
- すでに Red Hat Single Sign-On ユーザーアカウントをインポートし、認証されたアイデンティティープロバイダーアカウントとリンクしています。この場合、Red Hat Single Sign-On は既存ユーザーとして認証し、アプリケーションにリダイレクトします。
- この外部ユーザーにインポートされ、リンクされている既存の Red Hat Single Sign-On ユーザーアカウントはありません。通常は、新しいアカウントを登録して Red Hat Single Sign-On データベースに登録およびインポートするだけですが、同じメールで既存の Red Hat Single Sign-On アカウントがある場合はどうしたらよいですか?既存のローカルアカウントを外部アイデンティティープロバイダーに自動的にリンクすることは、常に外部アイデンティティープロバイダーからの情報を信頼できないセキュリティーです。
上記の競合や状況に関しては、さまざまな組織の要件が異なります。そのため、IDP 設定には First Login Flow
オプションがあり、ユーザーが外部 IDP から初めてログインした後に使用するワークフローを選択できます。デフォルトでは、これは最初の first broker login
フローを参照しますが、独自のフローを設定して使用することができ、異なるアイデンティティープロバイダーに異なるフローを使用することができます。
フロー自体は、Authentication
タブ下の管理コンソールで設定されます。First Broker Login
フローを選択すると、デフォルトで使用されているオーセンティケーターが表示されます。既存のフローを再構成できます。(たとえば、オーセンティケーターを無効にするか、required
として、そのオーセンティケーターをマークし、オーセンティケーターを設定します)。
12.10.1. デフォルトの最初のログインフロー
First Broker Login
フローで提供されるデフォルトの動作を説明します。
- プロファイルの確認
-
このオーセンティケーターは、ユーザーはアイデンティティープロバイダーから取得したプロファイル情報ページが表示される場合があります。オーセンティケーターは設定可能です。
Update Profile On First Login
オプションを設定できます。On
には常にプロファイルページと共に提示されます。この際、アイデンティティーをフェデレーションするために追加情報の入力を求めます。missing
の場合、ユーザーは必須の情報 (電子メール、名、姓) がアイデンティティープロバイダーによって提供されていない場合にのみ、プロファイルページとともに提示されます。Off
にすると、ユーザーが、Review profile info
リンク (Confirm Link Existing Account
オーセンティケーターによる最後の段階で表示される) でクリックしない限り、プロファイルページは表示されません。 - Create User If Unique
-
このオーセンティケーターは、アイデンティティープロバイダーからのアカウントと同じメールまたはユーザー名を持つ既存の Red Hat Single Sign-On アカウントがすでにあるかどうかを確認します。ない場合は、オーセンティケーターは新しいローカルの Red Hat Single Sign-On アカウントを作成し、それをアイデンティティープロバイダーとリンクし、フロー全体を終了します。それ以外の場合は、次の
Handle Existing Account
サブフローが処理されます。重複アカウントがないことを確認する場合は、このオーセンティケーターをREQUIRED
とマークできます。この場合、既存の Red Hat Single Sign-On アカウントがある場合、ユーザーはアカウント管理でアイデンティティープロバイダーアカウントをリンクする必要がある場合に、エラーページが表示されます。 - 既存のアカウントのリンクの確認
-
info ページで、同じメールを持つ既存の Red Hat Single Sign-On アカウントがあることを確認できます。プロファイルを再度確認し、異なるメールまたはユーザー名を使用できます (フローは再起動され、
Review Profile
オーセンティケーターに戻ります)。または、アイデンティティープロバイダーアカウントを既存の Red Hat Single Sign-On アカウントとリンクするかどうかを確認することができます。ユーザーがこの確認ページを表示する必要がない場合は、このオーセンティケーターを無効にしますが、メールの検証または再認証によりアイデンティティープロバイダーアカウントをリンクするよう簡単です。 - 既存のアカウントをメールで検証
-
このオーセンティケーターはデフォルトで
ALTERNATIVE
であるため、レルムに SMTP 設定が設定されている場合のみ使用されます。ユーザーがメールを送信します。ここで、アイデンティティープロバイダーを Red Hat Single Sign-On アカウントとリンクすることを確認できます。メールによるリンクを確認せず、常にパスワード (および OTP) で再認証する方が望ましい場合には、これを無効にします。 - 再認証による既存のアカウントの確認
- メールオーセンティケーターが無効または利用できない場合 (SMTP がレルム用に設定されていない) 場合に使用されます。Red Hat Single Sign-On アカウントをアイデンティティープロバイダーとリンクするためにユーザーが認証する必要があるログイン画面が表示されます。ユーザーは、すでに Red Hat Single Sign-On アカウントにリンクされている異なるアイデンティティープロバイダーで再認証することもできます。ユーザーを強制的に OTP を使用するようにすることもできます。そうでなければ、OTP がユーザーアカウントに既に設定されている場合に限り使用してください。
12.10.2. 既存の最初のログインフローの自動リンク
AutoLink オーセンティケーターは、任意のユーザー名/メールアドレスを使用してユーザーが登録できる汎用環境で危険です。ユーザーの登録が注意深くなり、ユーザー名/メールアドレスが割り当てられない限り、このオーセンティケーターは使用しないでください。
要求なしでユーザーが自動的にリンクされる最初のログインフローを設定するには、以下の 2 つのオーセンティケーターで新しいフローを作成します。
- 一意の場合はユーザーを作成
- このオーセンティケーターは、一意のユーザーが処理されるようにします。オーセンティケーター要件を「Alternative」に設定します。
- 既存ユーザーの自動設定
- 検証なしで既存のユーザーを認証コンテキストに自動的に設定します。オーセンティケーター要件を「Alternative」に設定します。
説明済みの設定では、2 つのオーセンティケーターを使用します。この設定は最も単純な設定ですが、必要に応じて他のオーセンティケーターを使用することができます。たとえば、エンドユーザーがプロファイル情報を確認する場合は、レビュープロファイルオーセンティケーターをフローの開始に追加できます。このフローに認証メカニズムを追加し、ユーザーがクレデンシャルを検証するように強制することもできます。これには、「Automatically Set Existing User」および「Password Form」を「Required」として「Alternative」サブフローを設定するなど、より複雑なフローが必要になります。
12.10.3. 自動ユーザー作成の無効化
デフォルトの最初のログインフローは、外部アイデンティティーに一致する Keycloak アカウントを検索し、これらをリンクします。一致する Keycloak アカウントがない場合は、自動的に作成されます。このデフォルトの動作は、読み取り専用の LDAP ユーザーストア (すべてのユーザーが事前に作成されることを意味します) など、一部のセットアップでは適切ではない可能性があります。この場合、自動ユーザー作成をオフにする必要があります。ユーザーの作成を無効にするには、以下を実行します。
-
First Broker Login
フロー設定を開きます。 -
Create User if Unique
をDISABLED
に設定します。 -
Confirm Link Existing Account
をDISABLED
に設定します。
この設定は、Keycloak 自体が、どの内部アカウントが外部アイデンティティーに対応するかを判断できないことも意味します。そのため、Verify Existing Account By Re-authentication
オーセンティケーターにより、ユーザー名およびパスワードが提供されます。
12.11. 外部 IDP トークンの取得
Red Hat Single Sign-On を使用すると、外部 IDP を使用して認証プロセスからのトークンと応答を保存できます。これには、IDP の設定ページで Store Token
設定オプションを使用できます。
アプリケーションコードは、これらのトークンを取得し、追加のユーザー情報でプルしたり、外部 IDP でリクエストを安全に呼び出すことを行うことができます。たとえば、アプリケーションは Google トークンを使用して他の Google サービスおよび REST API で呼び出す場合があります。特定のアイデンティティープロバイダーのトークンを取得するには、以下のようにリクエストを送信する必要があります。
GET /auth/realms/{realm}/broker/{provider_alias}/token HTTP/1.1 Host: localhost:8080 Authorization: Bearer <KEYCLOAK ACCESS TOKEN>
アプリケーションが Red Hat Single Sign-On で認証され、アクセストークンを受信している必要があります。このアクセストークンには、ブローカー
のクライアントレベルのロール read-token
を設定する必要があります。そのため、ユーザーにはこのロールのロールマッピングが必要で、クライアントアプリケーションにそのスコープ内にそのロールがなければなりません。この場合、Red Hat Single Sign-On で保護されたサービスにアクセスする場合には、ユーザー認証時に Red Hat Single Sign-On が発行するアクセストークンを送信する必要があります。ブローカー設定ページでは、Stored Tokens Readable
スイッチを有効にして、新たにインポートしたユーザーにこのロールを自動的に割り当てることができます。
これらの外部トークンについては、プロバイダー経由で再度ログインするか、またはクライアントが開始したアカウントリンク API を使用して再度確立できます。
12.12. アイデンティティーブローカーのログアウト
Red Hat Single Sign-On からログアウトすると、Red Hat Single Sign-On は、Keycloak にログインするのに使用される外部アイデンティティープロバイダーにリクエストを送信し、ユーザーはこのアイデンティティープロバイダーからログアウトされます。この動作を省略し、外部アイデンティティープロバイダーでのログアウトを避けることができます。詳細は、アダプターのログアウトドキュメント を参照してください。
第13章 ユーザーセッション管理
ユーザーがレルムにログインすると、Red Hat Single Sign-On はユーザーセッションを維持し、セッションでアクセスした各クライアントおよびクライアントのそれぞれを覚えます。レルム管理者は、これらのユーザーセッションで実行可能な管理機能があります。レルム全体のログイン統計を表示し、各クライアントにログイン統計を表示して、ログインした場所と場所を確認できます。管理者は、ユーザーまたはユーザーのセットを管理コンソールからログアウトできます。トークンを取り消すことができ、すべてのトークンとセッションのタイムアウトを設定できます。
13.1. セッションの管理
左側のメニュー項目 Sessions
に移動すると、レルム内で現在アクティブなセッション数の最上位ビューが表示されます。
セッション
クライアントの一覧と、そのクライアントに対して現在存在するアクティブなセッション数また、この一覧の右側にある Logout all
ボタンをクリックして、レルムの全ユーザーをログアウトできます。
13.1.1. Logout all
操作の制限
SSO クッキーセットはすべて無効になり、アクティブなブラウザーセッションで認証を要求するクライアントを再ログインする必要があります。特定のクライアントのみが、このログアウトイベント (特に Red Hat Single Sign-On OIDC クライアントアダプターを使用しているクライアント) に通知されます。SAML などの他のクライアントタイプにはバックチャネルログアウトリクエストを受け取りません。
Logout all
をクリックして、未処理のアクセストークンが取り消されていないことに注意してください。自然に期限切れになる必要があります。失効ポリシーをクライアントからプッシュする必要がありますが、Red Hat Single Sign-On OIDC クライアントアダプターを使用するクライアントでも機能することになります。
13.1.2. アプリケーションのドルダウン
Sessions
ページで、各クライアントにドリルダウンすることもできます。これにより、そのクライアントの Sessions
タブに移動します。Show Sessions
ボタンをクリックすると、どのユーザーがそのアプリケーションにログインしているかを確認できます。
アプリケーションセッション
13.1.3. ユーザードリルダウン
個別ユーザーの Sessions
タブに移動する場合は、セッション情報を表示することもできます。
ユーザーセッション
13.2. 失効ポリシー
システムが危険にさらされたら、すべてのセッションと、省略されたアクセストークンを取り消す方法が必要になります。これには、Sessions
画面の Revocation
タブに移動します。
取り消し
時間ベースの失効ポリシーのみを設定できます。コンソールでは、その期間の前にセッションまたはトークンが無効な日時を指定できます。Set to now
によりポリシーが現在の時刻と日付に設定されます。Push
ボタンは、この失効ポリシーを、Red Hat Single Sign-On OIDC クライアントアダプターがインストールされている登録された OIDC クライアントにプッシュします。
13.3. セッションおよびトークンのタイムアウト
Red Hat Single Sign-On により、セッション、クッキー、およびトークンのタイムアウトを細かく制御できます。これは、左側のメニュー項目 Realm Settings
の Tokens
タブですべて行われます。
Tokens タブ
各ページのアイテムを追って説明します。
設定 | 説明 |
---|---|
デフォルトの署名アルゴリズム | このレルムにトークンを割り当てるために使用されるデフォルトのアルゴリズム。 |
トークンの更新の取り消し | 更新トークンフローを実行する OIDC クライアントの場合、このフラグにより、その更新トークンが取り消され、クライアントが使用する要求で別のトークンを発行します。その結果、各更新トークンは 1 度だけ使用されます。 |
SSO Session Idle | また、OIDC クライアントも含まれます。ユーザーがこのタイムアウトよりもアクティブではない場合には、ユーザーセッションは無効になります。アイドルタイムアウトは、認証を要求するクライアントまたは更新トークンリクエストによりリセットされます。セッションの無効化が有効になる前に、アイドルタイムアウトに常に追加される小さな期間があります。以下の注記を参照してください。 |
SSO セッション最大 | ユーザーセッションが期限切れになり、無効化される最長時間。このオプションは、ユーザーアクティビティーに関係なく、ユーザーセッションがアクティブなままになる最大時間を制御します。 |
SSO Session Idle Remember Me | 標準の SSO Session Idle の設定と同じですが、Remember Me を有効にしてログインする場合です。ログインプロセス中に Remember Me が選択されている場合、セッションアイドル状態のタイムアウトを長く指定できるようになります。これは任意の設定であり、0 を大きな値に設定しない場合は、SSO Session Idle の設定と同じアイドルタイムアウトを使用します。 |
SSO Session Max Remember Me | 標準の SSO Session Max と同じですが、Remember Me を有効にしてログインする場合です。これにより、ログインプロセス中に Remember Me が選択された場合に、有効期間の長いセッションを指定できます。これは任意の設定であり、0 より大きい値に設定しない場合は、SSO セッション Max 設定と同じセッションライフスパンを使用します。 |
オフラインセッションのアイドリング | オフラインアクセスの場合は、オフライントークンが取り消される前にセッションがアイドル状態のままになる時間になります。セッションの無効化が有効になる前に、アイドルタイムアウトに常に追加される小さな期間があります。以下の注記を参照してください。 |
オフラインセッションの最大制限 | オフラインアクセスの場合は、このフラグがオンの場合、ユーザーアクティビティーに関係なく、オフライントークンがアクティブな状態を維持できる最大時間を制御するように Offline Session Max が有効になります。 |
オフラインセッションの最大 | offline accessの場合、対応するオフライントークンが無効になるまでの最大時間になります。このオプションは、ユーザーアクティビティーに関係なく、オフライントークンがアクティブな状態を維持する最大時間を制御します。 |
アクセストークンの寿命 | OIDC アクセストークンが作成されると、この値は期限切れに影響します。 |
インプリシットフロー (Implicit Flow) のアクセストークンのライフサイクル | Implicit Flow では更新トークンが提供されません。このため、Implicit Flow で作成されたアクセストークンには個別のタイムアウトが生じます。 |
クライアントログインのタイムアウト | これは、クライアントが OIDC で Authorization Code Flow を完了するために必要な最大時間です。 |
ログインのタイムアウト | ログインにかかる合計時間。認証がこの時間よりも長い場合は、ユーザーが認証プロセスを開始する必要があります。 |
ログインアクションのタイムアウト | 認証プロセスの 1 つのページでユーザーが費やすことができる最大時間。 |
ユーザーによる開始に関するアクションライフスパン | ユーザーが送信可能なアクションの最大最大時間 (例: パスワードメール) は有効期限が切れます。この値は、ユーザーが簡単に自己作成したアクションに反応するため、短いことが推奨されます。 |
デフォルトの管理者開始アクションのライフサイクル | 管理者がユーザーに送信可能な最大時間は有効期限が切れます。この値は、現在オフラインユーザーに管理者の送信メールができるように長く設定することを推奨します。デフォルトのタイムアウトは、トークンを発行する前にすぐに上書きできます。 |
ユーザーによる開始処理のオーバーライド | 操作 (たとえば、パスワード、ユーザーアクション、アイデンティティープロバイダーの E-mail 検証など) ごとに独立したタイムアウトを取得する可能性を許可します。このフィールドは任意です。何も指定しないと、デフォルトは User-Initiated Action Lifespan で設定された値に設定されます。 |
アイドルタイムアウトでは、セッションが期限切れから保たれない期間が 2 分ほどあります。たとえば、タイムアウトを 30 分に設定している場合、セッションの有効期限が切れる前に 32 分実際に実行されます。これは、クラスターと複数のデータセンター環境の一部のコーナーシナリオで必要になります。トークンが有効期限前に非常に短い時間で 1 つのクラスターノードで更新され、その他のクラスターノードはセッションの期限切れと誤って見なすため、そのセッションは期限切れと誤って見なわれていないためです。
13.4. オフラインアクセス
オフラインアクセスは、「OpenID Connect 仕様」に記載の機能です。ログイン中に、クライアントアプリケーションは、従来の更新トークンの代わりにオフライントークンを要求します。アプリケーションは、このオフライントークンをデータベースまたはディスクに保存し、ユーザーがログアウトした場合でも後で使用できます。これは、ユーザーがオンラインでない場合でも、ユーザーの代わりに「オフライン」アクションを実行する必要がある場合に有効です。この例は、毎夜ごとの一部のデータの定期的なバックアップです。
アプリケーションは、一部のストレージ (通常はデータベース) でオフライントークンを永続化してから、これを使用して Red Hat Single Sign-On サーバーから新しいアクセストークンを取得します。
従来の更新トークンとオフライントークンの違いは、オフライントークンはデフォルトで期限切れになることはありませんが、SSO Session Idle timeout
および SSO Session Max lifespan
の影響は受けません。オフライントークンは、ユーザーのログアウトまたはサーバーを再起動しても有効です。ただし、デフォルトでは、少なくても 30 日に 1 回、更新トークンのアクションにオフライントークンを使用する必要があります (この値である Offline Session Idle timeout
は、Realm Settings
の Tokens
タブで管理コンソールで変更できます)。さらに、Offline Session Max Limited
オプションを有効にすると、更新トークンにオフライントークンを使用するかどうかに関わらず、オフライントークンは 60 日後に期限切れになります (この値である Offline Session Max
は、レルム設定の Tokens タブで管理コンソールでも変更できます)。また、Revoke refresh tokens
オプションを有効にすると、各オフライントークンを一度に使用できます。したがって、更新後、これまでのトークンではなく、更新応答から DB に新しいオフライントークンを保存する必要があります。
ユーザーは、User Account Service 内で付与されたオフライントークンを表示し、取り消すことができます。管理ユーザーは、特定のユーザーの Consents
タブで、管理コンソールで各ユーザーのオフライントークンを取り消すことができます。管理者は、各クライアントの Offline Access
タブで発行されたすべてのオフライントークンを表示することもできます。オフライントークンの取り消しは、失効ポリシーを設定して取り消すことができます。
オフライントークンを発行できるようにするには、レルムレベルのロール offline_access
のロールマッピングが必要です。クライアントには、そのスコープにそのロールが必要です。最後に、クライアントに 任意のクライアントスコープ
として offline_access
クライアントスコープを追加する必要があります。これはデフォルトで行われます。
クライアントは、承認要求を Red Hat Single Sign-On に送信するときに scope=offline_access
パラメーターを追加することでオフライントークンを要求できます。Red Hat Single Sign-On OIDC クライアントアダプターは、アプリケーションのセキュアな URL にアクセスするために使用する場合に、このパラメーターを自動的に追加します (例: http://localhost:8080/customer-portal/secured?scope=offline_access)。認証要求の本文に scope=offline_access
を追加する場合は、Direct Access Grant および Service Accounts もオフライントークンをサポートします。
13.5. 一時的なセッション
Red Hat Single Sign-On には、一時的なセッションの概念があります。一時的なセッションを使用すると、認証の成功後は、ユーザーセッションは作成されません。ユーザーを正常に認証された現在のリクエストの範囲用に一時一時セッションのみが作成されます。この一時的なセッションにより、Red Hat Single Sign-On は認証後にプロトコルマッパーを実行できます。
一時的なセッションが使用されると、クライアントアプリケーションでは、トークンの更新またはイントロスペクションを行う方法や、特定のセッションが有効かどうかを確認する方法がありません。状況によっては、これらのアクションが不要となるため、ユーザーセッションの永続性の追加オーバーヘッドを避けることができます。これにより、パフォーマンスが向上し、メモリーとネットワーク通信 (クラスターおよびデータセンター環境の場合) を保存します。
第14章 ユーザーストレージフェデレーション
多くの企業には、ユーザーおよびパスワードやその他の認証情報に関する情報を保持する既存のユーザーデータベースがあります。多くの場合、既存のストアから純粋な Red Hat Single Sign-On デプロイメントに移行することはできません。Red Hat Single Sign-On では、既存の外部データベースデータベースをフェデレーションできます。デフォルトでは LDAP および Active Directory をサポートしますが、User Storage SPI を使用してカスタムユーザーデータベースの独自の拡張をコード化することもできます。
Red Hat Single Sign-On は、ユーザーがログインしたときに、独自の内部ユーザーストアを検索し、ユーザーを見つけることです。これを見つけることができない場合、レルムに設定したすべての User Storage プロバイダーに対して一致を見つけるまで繰り返されます。外部ストアからのデータは、Red Hat Single Sign-On ランタイムが使用する共通のユーザーモデルにマッピングされます。この一般的なユーザーモデルは、OIDC トークン要求と SAML アサーション属性にマッピングできます。
外部データベースデータベースは、Red Hat Single Sign-On のすべての機能をサポートするのに必要なすべてのデータを持ちます。そのため、ユーザーストレージプロバイダーは Red Hat Single Sign-On ユーザーストアにローカルに格納できるものを選択できます。ユーザーをローカルにインポートし、外部ストアと定期的に同期しているプロバイダーもあります。この方法は、プロバイダーの機能と設定によって異なります。たとえば、外部ユーザーストアは OTP に対応していない可能性があります。プロバイダーによっては、この OTP は Red Hat Single Sign-On により処理および保存できます。
14.1. プロバイダーの追加
ストレージプロバイダーを追加するには、管理コンソールの左側のメニュー項目 User Federation
に移動します。
ユーザーフェデレーション
中央に、Add Provider
リストボックスがあります。追加するプロバイダータイプを選択し、そのプロバイダーの設定ページに移動します。
14.2. プロバイダー障害の処理
User Storage Provider が失敗した場合 (LDAP サーバーがダウンしている場合など)、ログインに問題があり、管理コンソールでユーザーを表示できない場合があります。Red Hat Single Sign-On は、ストレージプロバイダーを使用してユーザーを検索する際に障害をキャッチしません。呼び出しを中止します。そのため、ユーザー検索中に失敗した優先度が高いストレージプロバイダーがある場合、ログインまたはユーザークエリーは完全に例外で失敗し、中止します。これは次に設定されているプロバイダーにフェイルオーバーしません。
ローカルの Red Hat Single Sign-On ユーザーデータベースは常に最初に検索され、LDAP またはカスタムのユーザーストレージプロバイダーの前にユーザーを解決します。LDAP およびカスタムバックエンドへの接続で問題が発生した場合に、ローカルの Red Hat Single Sign-On ユーザーデータベースに保存されている管理者アカウントの作成を検討できます。
各 LDAP およびカスタム User Storage Provider には、管理コンソールページに enable
スイッチがあります。User Storage Provider を無効にすると、ユーザークエリーの実行時にプロバイダーをスキップし、優先順位が低い別のプロバイダーに保存されるユーザーで表示し、ログインできるようにします。プロバイダーがインポート
ストラテジーを使用し、無効にした場合、インポートされたユーザーは引き続き検索に利用できますが、読み取り専用モードとしてのみ使用できます。プロバイダーを再度有効にするまで、これらのユーザーを変更することはできません。
理由として、Red Hat Single Sign-On がフェイルオーバーしない理由は、ストレージプロバイダーのルックアップが失敗した場合、ユーザーデータベースの重複ユーザー名や重複メールが頻繁に行われるためです。これにより、ユーザーが別のものからロードされることを想定する際に、ユーザーが外部のストアから読み込まれる可能性があるので、セキュリティー上の問題が発生し、予期せぬ問題が発生する可能性があります。
14.3. LDAP および Active Directory
Red Hat Single Sign-On には、LDAP/AD プロバイダーが組み込まれています。同じ Red Hat Single Sign-On レルムで複数の異なる LDAP サーバーをフェデレーションすることは可能です。LDAP ユーザー属性は、Red Hat Single Sign-On の共通ユーザーモデルにマップできます。デフォルトでは、ユーザー名、電子メール、名、および姓のマッピングが行われますが、追加のマッピングを設定することができます。LDAP プロバイダーは LDAP/AD プロトコルおよび各種ストレージ、編集および同期モードによるパスワード検証もサポートします。
フェデレーションされた LDAP ストアを設定するには、管理コンソールに移動します。左側のメニューオプション User Federation
をクリックします。このページを表示するには、Add Provider
選択ボックスがあります。このリストに ldap が表示されるはずです。ldap を選択すると、LDAP 設定ページに移動します。
14.3.1. ストレージモード
デフォルトでは、Red Hat Single Sign-On はユーザーを LDAP からローカルの Red Hat Single Sign-On ユーザーデータベースにインポートします。このユーザーのコピーは、オンデマンドで同期されるか、または定期的なバックグラウンドタスクを介して同期されます。これに対する 1 つの例外は、パスワードの同期です。パスワードはインポートされません。検証は常に LDAP サーバーに委譲されます。このアプローチの利点は、すべての Red Hat Single Sign-On 機能は、ローカルに保存する必要のあるユーザーごとの追加のデータとして機能することです。このアプローチのマイナス面は、特定のユーザーが初めてクエリーされるたびに、対応する Red Hat Single Sign-On データベース挿入が実行されます。インポートは、LDAP サーバーとも同期する必要があります。しかし、LDAP マッパーがデータベースではなく LDAP から特定の属性を常に読み取るように設定されている場合には、インポートの同期は必要ありません。
または、Red Hat Single Sign-On ユーザーデータベースにユーザーをインポートしないよう選択することもできます。この場合、Red Hat Single Sign-On ランタイムが使用する一般的なユーザーモデルは LDAP サーバーのみでサポートされます。つまり、LDAP が Red Hat Single Sign-On 機能が必要とするデータの一部をサポートしない場合、その機能は機能しないことを意味します。このアプローチの利点は、LDAP ユーザーのコピーを Red Hat Single Sign-On ユーザーデータベースにインポートおよび同期するオーバーヘッドを持たないことです。
このストレージモードは、Import Users
スイッチによって制御されます。ユーザーをインポートするには On
に設定します。
ユーザーのインポートが無効になっている場合は、Red Hat Single Sign-On データベースにユーザープロファイル属性を保存できません。また、LDAP にマッピングされたユーザープロファイルメタデータ以外のメタデータを保存することはできません。これに対する単一例外は、LDAP にマップされるユーザープロファイルメタデータです。これには、LDAP マッパーの設定に基づいたロールマッピング、グループマッピング、およびその他のメタデータが含まれる場合があります。LDAP 以外のマッピングユーザーデータの一部を変更しようとすると、ユーザーを更新することができません。たとえば、ユーザーの 有効な
フラグが一部の LDAP 属性にマップされていない限り、LDAP マッピングしたユーザーを無効にすることはできません(これは通常該当しません)。
14.3.2. 編集モード
User Account Service サービスのユーザー、および管理コンソールの管理者には、ユーザーメタデータを変更する機能があります。セットアップによっては、LDAP の更新権限がある場合とない場合があります。Edit Mode
設定オプションは、LDAP ストアで設定した編集ポリシーを定義します。
- READONLY
- ユーザー名、メールアドレス、姓名、およびその他のマップ属性は変更できません。Red Hat Single Sign-On は、これらのフィールドの更新を試みるたびにエラーを表示します。また、パスワードの更新はサポートされません。
- WRITABLE
- ユーザー名、電子メール、名、姓名、その他のマップされた属性とパスワードはすべて更新され、LDAP ストアに自動的に同期されます。
- 未同期
- ユーザー名、メールアドレス、姓、およびパスワードへの変更は、Red Hat Single Sign-On のローカルストレージに保存されます。LDAP に同期する方法を把握しているのはユーザー次第です。これにより、Red Hat Single Sign-On デプロイメントは、読み取り専用の LDAP サーバーでユーザーメタデータの更新をサポートできます。このオプションは、LDAP からローカルの Red Hat Single Sign-On ユーザーデータベースにユーザーをインポートする場合に限り有効です。
LDAP プロバイダーが作成されると、初期の LDAP マッパーのセットが作成されます。マッパーは、Vendor
、Edit Mode
、および Import Users
スイッチの選択した組み合わせに基づいて「ベストエフォート」に設定されます。たとえば、UNSYNCED 編集モードの場合は、特定のユーザー属性が LDAP ではなくデータベースから読み取ることが望ましい方法で、マッパーは事前設定されています。ただし、後で編集モードを変更すると、タイミングで手動で変更したかどうかを簡単に検出できないため、マッパーの設定は変更されません。つまり、Edit Mode
スイッチを更新しないが、LDAP プロバイダーの作成時に常に Edit Mode
を決定することが推奨されます。これは、Import Users
スイッチにも該当します。
14.3.3. その他の設定オプション
- コンソール表示名
- このプロバイダーが管理コンソールで参照される場合に使用される名前
- 優先度
- ユーザーを検索する、またはユーザーを追加する際のこのプロバイダーの優先度。
- 登録の同期
- LDAP は新しいユーザーの追加をサポートしますか?管理コンソールで Red Hat Single Sign-On で作成した新規ユーザーまたは LDAP に追加する登録ページが必要な場合は、このスイッチをクリックします。
- Kerberos 認証を許可
- LDAP からプロビジョニングされたユーザーデータを使用して、レルムで Kerberos/SPNEGO 認証を有効にします。Kerberos セクションでは詳細を確認してください。
- その他のオプション
- 残りの設定オプションは、分かりやすくなるはずです。管理コンソールのツールチップの上にマウスポインターをかざすと、それらに関する詳細が表示されます。
14.3.4. SSL 経由で LDAP に接続
LDAP ストアにセキュアな接続 URL (例: 'ldaps://myhost.com:636') を設定する場合、Red Hat Single Sign-On は LDAP サーバーとの通信に SSL を使用します。重要なことは、Red Hat Single Sign-On サーバー側でトラストストアを適切に設定することです。そうでないと、Red Hat Single Sign-On は LDAP への SSL 接続を信頼できません。
Red Hat Single Sign-On のグローバルトラストストアは、Truststore SPI で設定できます。詳細は、『サーバーインストールおよび設定ガイド』 を参照してください。トラストストア SPI が分からないと、トラストストアは Java によって提供されるデフォルトメカニズムにフォールバックします (システムプロパティー javax.net.ssl.trustStore
または cacerts ファイルのいずれか)。システムプロパティーが設定していない場合は、JDK から cacerts ファイルを使用します。
LDAP フェデレーションプロバイダー設定に Use Truststore SPI
を使用すると、Truststore SPI を使用するかどうかを選択できます。デフォルトでは、この値は ldaps 専用
ですが、ほとんどのデプロイメントでは問題ありません。Truststore SPI は、LDAP への接続 URL が ldaps
で始まる場合にのみ使用されます。
14.3.5. LDAP ユーザーの Red Hat Single Sign-On への同期
ユーザーのインポートオプションを有効にすると、LDAP プロバイダーは、必要な LDAP ユーザーの同期 (インポート) を Red Hat Single Sign-On のローカルデータベースに自動的に処理します。ユーザーがログインすると、LDAP プロバイダーは LDAP ユーザーを Red Hat Single Sign-On データベースにインポートし、LDAP パスワードに対して認証します。これは、ユーザーがインポートされる唯一の時間です。管理コンソールの左側のメニュー項目 Users
に移動し、View all users
ボタンをクリックすると、Red Hat Single Sign-On によって最低 1 回認証された LDAP ユーザーのみが表示されます。この操作により LDAP ユーザーデータベース全体のインポートがトリガーされないように、この方法が実装されます。
全 LDAP ユーザーを Red Hat Single Sign-On データベースに同期する場合は、LDAP プロバイダー設定ページで Sync Settings
を設定し、有効にすることができます。2 種類の同期が存在します。
- 定期的な完全同期 (Periodic Full)
-
このタイプは、すべての LDAP ユーザーを Red Hat Single Sign-On データベースと同期します。Red Hat Single Sign-On にすでに存在する LDAP ユーザーは、LDAP に直接変更されたものは Red Hat Single Sign-On データベースで更新されます。たとえば、
Mary Kelly
ユーザーは、LDAP で、Mary Smith
に変わりました。 - 定期的な変更したユーザー同期 (Periodic Changed)
- 同期が行われると、最後の同期が作成または更新されたユーザーのみが更新されたり、インポートされます。
同期を処理する最適な方法は、最初に LDAP プロバイダーを作成し、変更したユーザーの定期的な同期を設定する際に、Synchronize all users
ボタンをクリックすることです。
14.3.6. LDAP マッパー
LDAP マッパーは、さまざまな点で LDAP プロバイダーによってトリガーされる listeners
で、別のエクステンションが LDAP 統合を参照します。これらは LDAP 経由でログインし、ユーザーが Red Hat Single Sign-On の起動中にインポートする必要がある場合や、ユーザーが管理コンソールからクエリーされる場合にトリガーされます。LDAP フェデレーションプロバイダーを作成すると、Red Hat Single Sign-On はこのプロバイダーの組み込み mappers
のセットを自動的に提供します。このセットを変更し、新しいマッパーを作成したり、既存のマッパーを更新/削除したりすることもできます。
- ユーザー属性マッパー
-
これにより、Red Hat Single Sign-On ユーザーのどの属性がマッピングされる LDAP 属性を指定することができます。たとえば、Red Hat Single Sign-On データベースの LDAP 属性
mail
を属性email
に設定できます。このマッパー実装には常に 1 対 1 のマッピングが存在します (1 つの LDAP 属性が 1 つの Red Hat Single Sign-On 属性にマッピングされます)。 - fullName Mapper
-
これにより、一部の LDAP 属性 (通常は
cn
) に保存されているユーザーのフルネームを、Red Hat Single Sign-On データベースのfirstName
およびlastname
属性にマッピングされるように指定できます。cn
にユーザーのフルネームを含めることは、一部の LDAP デプロイメントでは一般的なケースです。 - ハードコードされた属性マッパー
-
このマッパーは LDAP と一緒にリンクされた各 Red Hat Single Sign-On ユーザーにハードコードされた属性値を追加します。また、このマッパーは
enabled
またはemailVerified
ユーザープロパティーの値を強制することもできます。 - ロールマッパー
-
これにより、LDAP から Red Hat Single Sign-On ロールマッピングへのロールマッピングを設定できます。ロールマッパーは、LDAP ロール (通常は LDAP ツリーの特定ブランチからのグループ) を、指定したクライアントのレルムロールまたはクライアントロールのいずれかに対応するロールにマップするために使用できます。同じ LDAP プロバイダーに対してより多くのロールマッパーを設定するのは問題ありません。たとえば、
ou=main,dc=example,dc=org
下のグループからのロールマッピングはレルムロールマッピングにマッピングされ、ou=finance,dc=example,dc=org
の下にあるグループからのロールマッピングが、クライアントfinance
のクライアントロールマッピングにマップされるように指定できます。 - ハードコーディングされたロールマッパー
- このマッパーは、指定された Red Hat Single Sign-On ロールを LDAP プロバイダーから各 Red Hat Single Sign-On ユーザーに付与します。
- Group Mapper
- これにより、LDAP ツリーの特定ブランチから、Red Hat Single Sign-On のグループに LDAP グループをマップできます。また、Red Hat Single Sign-On の LDAP からユーザーグループマッピングに、ユーザーグループマッピングも伝播されます。
- MSAD ユーザーアカウントマッパー
-
このマッパーは、Microsoft Active Directory (MSAD) に固有のものです。MSAD ユーザーアカウント状態を Red Hat Single Sign-On アカウントの状態に密接に統合することができます (アカウントが有効な、パスワードの有効期限など)。これは、LDAP 属性
userAccountControl
およびpwdLastSet
を使用します。これはいずれも MSAD に固有のもので、LDAP 標準ではありません。たとえば、ipwdLastSet
が0
の場合、パスワードを更新するには Red Hat Single Sign-On ユーザーが必要で、ユーザーに UPDATE_PASSWORD 必須アクションが追加されました。userAccountControl
が514
(無効なアカウント) の場合は、Red Hat Single Sign-On ユーザーも無効になります。 - Certificate Mapper
-
このマッパーは X.509 証明書のマッピングに固有のものです。通常、これは X.509 認証と併用され、ID ソースとして
Full certificate in PEM format
を使用します。User Attribute Mapper
と同じ動作をしますが、Red Hat Single Sign-On は PEM 形式または DER フォーマットの証明書を格納する LDAP 属性についてフィルターできます。通常、このマッパーで LDAP からAlways Read Value
を有効にすることが推奨されます。
デフォルトでは、ユーザー名、ファイル名、名、姓、電子メールなどの Red Hat Single Sign-On の基本属性属性を対応する LDAP 属性にマップする User 属性マッパーがあります。これらの拡張は自由に行い、追加の属性マッピングを指定することができます。管理コンソールはツールチップを提供します。これは、対応するマッパーの設定に役立ちます。
14.3.7. パスワードのハッシュ化
ユーザーのパスワードが Red Hat Single Sign-On から更新され、LDAP に送信されると、常にプレーンテキストで送信されます。これは、ハッシュと salt が DB に送信される前にパスワードに適用される場合に、パスワードを組み込み Red Hat Single Sign-On データベースに更新することとは異なります。LDAP の場合、Red Hat Single Sign-On は LDAP サーバーに依存してパスワードのハッシュおよび salt を提供します。
Microsoft Active Directory、RHDS または FreeIPA などの LDAP サーバーは、デフォルトでこれを提供します。OpenLDAP や ApacheDS などのその他の場合には、RFC3062 に従って LDAPv3 Password Modify Extended Operation を使用しない限り、デフォルトでパスワードをプレーンテキストで保存できます。LDAPv3 Password Modify Extended Operation は LDAP 設定ページで明示的に有効にする必要があります。詳細は、お使いの LDAP サーバーのドキュメントを参照してください。
ldapsearch
および base64 を使用して変更したディレクトリーエントリーを検査することで、ユーザーパスワードが正しくハッシュ化され、プレーンテキストとして保存されていることを確認します 。
14.4. SSSD および FreeIPA Identity Management の統合
Red Hat Single Sign-On には、SSSD (System Security Services Daemon) プラグインが同梱されています。SSSD は、最新の Fedora または Red Hat Enterprise Linux に含まれており、複数の ID および認証プロバイダーへのアクセスを提供します。フェイルオーバーやオフラインサポートなどの利点があります。設定オプションと詳細情報は、Red Hat Enterprise Linux Identity Management のドキュメント を参照してください。
SSSD は、認証とアクセス制御を提供する FreeIPA アイデンティティー管理(IdM)サーバーとも統合します。Red Hat Single Sign-On では、この統合認証を PAM サービスに対する認証と、SSSD からユーザーデータを取得するのに役立ちます。Linux 環境における Red Hat Identity Management の使用に関する詳細は、Red Hat Enterprise Linux Identity Management のドキュメントを参照してください。
Red Hat Single Sign-On と SSSD 間の通信のほとんどは、読み取り専用の D-Bus インターフェースを介して行われます。このため、ユーザーのプロビジョニングおよび更新の唯一の方法は、FreeIPA/IdM 管理インターフェースを使用することです。デフォルトでは、LDAP フェデレーションプロバイダーと同様に、ユーザー名、メール、名、および姓しかインポートされません。
グループとロールは自動的に登録されますが、同期されないため、Red Hat Single Sign-On の管理者から直接行った変更は SSSD と同期されません。
FreeIPA/IdM サーバーの設定方法に関する情報は、以下を参照してください。
14.4.1. FreeIPA/IdM Server
分かりやすくするために、すでに利用可能な FreeIPA Docker イメージが使用されます。サーバーを設定するには、FreeIPA ドキュメント を参照してください。
Docker を使用して FreeIPA サーバーを実行するには、以下のコマンドが必要です。
docker run --name freeipa-server-container -it \ -h server.freeipa.local -e PASSWORD=YOUR_PASSWORD \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -v /var/lib/ipa-data:/data:Z freeipa/freeipa-server
server.freeipa.local
のパラメーター -h
は FreeIPA/IdM サーバーのホスト名を表します。YOUR_PASSWORD
を選択したパスワードに変更するようにしてください。
コンテナーが起動したら、/etc/hosts
を以下に変更します。
x.x.x.x server.freeipa.local
この変更を加えない場合は、DNS サーバーを設定する必要があります。
SSSD フェデレーションプロバイダーが起動し、Red Hat Single Sign-On で実行するように、IPA ドメインに Linux マシンを登録する必要があります。
ipa-client-install --mkhomedir -p admin -w password
クライアントマシンで、すべてが想定通りに機能されていることを確認するには、以下を実行します。
kinit admin
パスワードの入力が求められます。その後、以下のコマンドを使用して IPA サーバーにユーザーを追加できます。
$ ipa user-add john --first=John --last=Smith --email=john@smith.com --phone=042424242 --street="Testing street" \ --city="Testing city" --state="Testing State" --postalcode=0000000000 --password
ユーザーのパスワードの設定を強制するには、kinit を使用します。ユーザーに john を指定し、以下のコマンドを入力します。
kinit john
通常の IPA 操作を復元するには、以下のコマンドを入力します。
kdestroy -A kinit admin
14.4.2. SSSD および D-Bus
前述のように、フェデレーションプロバイダーは D-BUS を使用して SSSD からデータを取得し、PAM を使用して認証を行います。
まず sssd-dbus RPM をインストールする必要があります。これにより、SSSD からの情報をシステムバスで送信できるようにします。
$ sudo yum install sssd-dbus
このプロビジョニングスクリプトを実行する必要があります。
$ .../bin/federation-sssd-setup.sh
このスクリプトは、/etc/sssd/sssd.conf
に必要な変更を加えます。
[domain/your-hostname.local] ... ldap_user_extra_attrs = mail:mail, sn:sn, givenname:givenname, telephoneNumber:telephoneNumber ... [sssd] services = nss, sudo, pam, ssh, ifp ... [ifp] allowed_uids = root, yourOSUsername user_attributes = +mail, +telephoneNumber, +givenname, +sn
また、keycloak
ファイルは /etc/pam.d/
に含まれています。
auth required pam_sss.so account required pam_sss.so
dbus-send
を実行して、すべてが予想どおりに機能することを確認します。
sudo dbus-send --print-reply --system --dest=org.freedesktop.sssd.infopipe /org/freedesktop/sssd/infopipe org.freedesktop.sssd.infopipe.GetUserGroups string:john
ユーザーのグループが表示されるはずです。このコマンドでタイムアウトまたはエラーが返されると、Red Hat Single Sign-On で実行されているフェデレーションプロバイダーも何も取得できないことを意味します。
これは、マシンが FreeIPA IdM サーバーに登録されていないか、SSSD サービスにアクセスするパーミッションがありません。
パーミッションがない場合は、Red Hat Single Sign-On サーバーを実行しているユーザーが、以下のセクションの /etc/sssd/sssd.conf
ファイルに含まれていることを確認します。
[ifp] allowed_uids = root, your_username
14.4.3. SSSD フェデレーションプロバイダーの有効化
Red Hat Single Sign-On は、DBus-Java を使用して D-Bus が低いレベルで通信します。これは Unix ソケットライブラリーに依存します。
SSSD フェデレーションプロバイダーを有効にする前に、このライブラリーの RPM をインストールする必要があります。
$ sudo yum install rh-sso7-libunix-dbus-java
PAM Red Hat Single Sign-On での認証では JNA を使用します。このパッケージがインストールされていることを確認します。
$ sudo yum install jna
sssctl user-checks
コマンドを使用して設定を検証します。
$ sudo sssctl user-checks admin -s keycloak
14.5. フィード SSSD ストアの設定
インストール後に、調整された SSSD ストアを設定する必要があります。
フェデレーションされている SSSD ストアを設定するには、以下の手順を実行します。
- 管理コンソール に移動します。
- 左側のメニューから User Federation. を選択します。
- Add Provider ドロップダウンリストから、sssd を選択します。sssd 設定ページが開きます。
- Save をクリックします。
これで、FreeIPA/IdM 認証情報を使用して Red Hat Single Sign-On に対する認証が可能になりました。
14.6. カスタムプロバイダー
Red Hat Single Sign-On には、独自のカスタムプロバイダーを作成するのに使用する User Storage Federation の SPI があります。詳細は『サーバー開発者ガイド』 を参照してください。
第15章 監査およびイベント
Red Hat Single Sign-On は、豊富な監査機能のセットを提供します。すべてのログインアクションはデータベースへ記録および保存でき、管理コンソールでレビューできます。すべての管理者アクションも記録し、レビューすることもできます。プラグインがこれらのイベントをリッスンし、一部のアクションを実行できる Listener SPI もあります。組み込みリスナーには、簡単なログファイルとイベントが発生したときにメールを送信する機能が含まれています。
15.1. ログインイベント
ログインイベントは、ユーザーが正常にログインしたり、一部の本文が不正なパスワードに入るとき、またはユーザーアカウントの更新時に行われます。ユーザーに発生するすべてのイベントは、記録と表示が可能です。デフォルトでは、イベントは管理コンソールに保存または表示されません。エラーイベントのみがコンソールおよびサーバーのログファイルに記録されます。永続化を開始するには、ストレージを有効にする必要があります。左側のメニュー項目 Events
に移動し、Config
タブを選択します。
イベント設定
イベントの保存を開始するには、Login Events Settings
で Save Events
スイッチをオンに切り替える必要があります。
イベントの保存
Saved Types
フィールドでは、イベントストアに保存するイベントタイプを指定できます。Clear events
ボタンを使用すると、データベースのすべてのイベントを削除できます。Expiration
フィールドでは、イベントの保存期間を指定できます。ログインイベントのストレージを有効にし、設定を決定したら、このページの下部にある Save
ボタンをクリックしないでください。
イベントを表示するには、Login Events
タブに移動します。
ログインイベント
ご覧のとおり、多くの情報が保存され、すべてのイベントを保存する場合は、ログインアクションごとに多数のイベントが保存されるイベントがあります。このページの Filter
ボタンを使用すると、実際に対象のイベントをフィルターできます。
ログインイベントフィルター
このスクリーンショットでは、Login
イベントのみを絞り込みています。Update
ボタンをクリックしてフィルターを実行します。
15.1.1. イベントタイプ
ログインイベント:
- Login: ユーザーがログインしている。
- Register: ユーザーが登録済みです。
- Logout: ユーザーがログアウトしました。
- トークンへのコード: アプリケーション/クライアントではトークンのコードが交換されます。
- 更新トークン: アプリケーション/クライアントでトークンが更新されました。
アカウントイベント:
- ソーシャルリンク: アカウントがソーシャルプロバイダーにリンクされている。
- Remove Social Link: ソーシャルプロバイダーがアカウントから削除されました。
- Update Email: アカウントのメールアドレスが変更されました。
- Update Profile: アカウントのプロファイルが変更されました。
- パスワードリセットの送信: パスワードリセットメールが送信されました。
- Update Password: アカウントのパスワードが変更されました。
- Update TOTP: アカウントの TOTP 設定が変更になりました。
- Remove TOTP: TOTP はアカウントから削除されました。
- Send Verify Email: メールの検証メールが送信されました。
- Verify Email: アカウントのメールアドレスが検証されました。
すべてのイベントには、対応するエラーイベントがあります。
15.1.2. イベントリスナー
イベントリスナーはイベントをリッスンし、そのイベントに基づいてアクションを実行します。Red Hat Single Sign-On には、Logging Event Listener と Email Event Listener の 2 つの組み込みリスナーがあります。
Logging Event リスナーは、エラーイベントが発生し、デフォルトで有効にされるたびにログファイルに書き込みます。ログメッセージの例を以下に示します。
11:36:09,965 WARN [org.keycloak.events] (default task-51) type=LOGIN_ERROR, realmId=master, clientId=myapp, userId=19aeb848-96fc-44f6-b0a3-59a17570d374, ipAddress=127.0.0.1, error=invalid_user_credentials, auth_method=openid-connect, auth_type=code, redirect_uri=http://localhost:8180/myapp, code_id=b669da14-cdbb-41d0-b055-0810a0334607, username=admin
このロギングは、fail2Ban などのツールを使用して、ユーザーパスワードの推測を試みる場所のハッカーボットがあるかどうかを検出する場合に非常に便利です。LOGIN_ERROR
のログファイルを解析し、IP アドレスをプルできます。次に、この情報を Fail2Ban にフィードし、攻撃を防ぐのに役立ちます。
Logging Event リスナーは、イベントを org.keycloak.events
ロガーカテゴリーに記録します。デフォルトでは、デバッグログイベントはサーバーログに含まれません。
サーバーログにデバッグログイベントを含めるには、standalone.xml
ファイルを編集し、Logging Event リスナーによって使用されるログレベルを変更します。または、org.keycloak.events
のログレベルを設定することもできます。
たとえば、ログレベルを変更するには、以下を追加します。
<subsystem xmlns="urn:jboss:domain:logging:..."> ... <logger category="org.keycloak.events"> <level name="DEBUG"/> </logger> </subsystem>
Logging Event リスナーによって使用されるログレベルを変更するには、以下を追加します。
<subsystem xmlns="urn:jboss:domain:keycloak-server:..."> ... <spi name="eventsListener"> <provider name="jboss-logging" enabled="true"> <properties> <property name="success-level" value="info"/> <property name="error-level" value="error"/> </properties> </provider> </spi> </subsystem>
ログレベルの有効な値は debug
、info
、warn
、error
、および fatal
です。
メールイベントリスナーは、イベント発生時にユーザーのアカウントにメールを送信します。
現在、Email Event リスナーは以下のイベントをサポートします。
- ログインエラー
- パスワードの更新
- TOTP の更新
- TOTP の削除
Email Listener を有効にするには Config
タブに移動し、Event Listeners
フィールドをクリックします。これにより、メールを選択できるドロップダウンリストが表示されます。
ディストリビューションに同梱される standalone.xml
、standalone-ha.xml
、または domain.xml
を編集して、1 つ以上のイベントを除外できます。以下は例になります。
<spi name="eventsListener"> <provider name="email" enabled="true"> <properties> <property name="exclude-events" value="["UPDATE_TOTP","REMOVE_TOTP"]"/> </properties> </provider> </spi>
standalone.xml
、standalone-ha.xml
、または domain.xml
を編集して、データベースに保存されているイベントの詳細の最大長を設定することもできます。この設定は、一部のフィールド (例: redirect_uri) が非常に長い場合に役に立ちます。以下は、最大長を定義する例です。
<spi name="eventsStore"> <provider name="jpa" enabled="true"> <properties> <property name="max-detail-length" value="1000"/> </properties> </provider> </spi>
standalone.xml
、standalone-ha.xml
、または domain.xml
ファイルが存在する場所の詳細は、『サーバーインストールおよび設定ガイド』を参照してください。
15.2. 管理イベント
監査目的で、管理コンソール内で管理者が実行するアクションを記録できます。管理コンソールでは、Red Hat Single Sign-On REST インターフェースを呼び出して管理機能を実行します。Red Hat Single Sign-On の監査は、これらの REST 呼び出しです。結果となるイベントは、管理コンソールで表示できます。
管理アクションの監査を有効にするには、左側のメニュー項目 Events
に移動し、Config
タブを選択します。
イベント設定
Admin Events Settings
セクションで、Save Events
スイッチをオンにします。
管理イベント設定
Include Representation
スイッチには、管理 REST API 経由で送信される JSON ドキュメントが含まれます。これにより、管理者が実行した内容を正確に表示できますが、データベースに保存された多くの情報が発生する可能性があります。Clear admin events
ボタンを使用すると、保存されている現在の情報を消去できます。
管理イベントを表示するには、Admin Events
タブに移動します。
管理イベント
Details
列に Representation
ボックスがある場合は、それをクリックしてその操作で送信された JSON を表示します。
Admin Representation
Filter
ボタンをクリックして、対象のイベントにフィルターをかけることもできます。
管理イベントフィルター
第16章 エクスポートおよびインポート
Red Hat Single Sign-On は、データベース全体をエクスポートおよびインポートする機能があります。これは、Red Hat Single Sign-On データベース全体をある環境から別の環境に移行する場合や、別のデータベース (MySQL から Oracle など) に移行する場合に役立ちます。エクスポートとインポートはサーバーの起動時にトリガーされ、そのパラメーターは Java システムプロパティーを使用して渡されます。インポートとエクスポートはサーバーの起動時に発生するため、サーバーやデータベースではその他のアクションが行われないため注意してください。
データベースを以下のようにエクスポート/インポートすることができます。
- ローカルファイルシステムのディレクトリー
- ファイルシステムの単一 JSON ファイル
ディレクトリーストラテジーを使用してインポートする場合は、ファイルは以下で指定された命名規則に従う必要があることに注意してください。以前にエクスポートされたファイルをインポートする場合、ファイルはすでにこの規則に従います。
- <REALM_NAME>-realm.json (例: 「acme-roadrunner-affairs」という名前のレルムの場合は「acme-roadrunner-affairs-realm.json」)
- <REALM_NAME>-users-<INDEX>.json (例: 「acme-roadrunner-affairs」という名前のレルムにおける最初のユーザーファイルの場合は「acme-roadrunner-affairs-users-0.json」)
ディレクトリーへエクスポートする場合には、各 JSON ファイルに保存されているユーザー数を指定することもできます。
データベースにユーザー数が多い場合は (500 以上)、単一のファイルではなくディレクトリーにエクスポートすることを強く推奨します。1 つのファイルにエクスポートすると、非常に大きなファイルが発生する可能性があります。また、ディレクトリープロバイダーは各「ページ」(ユーザーと共にファイル) に別のトランザクションを使用するため、パフォーマンスが向上します。ファイルごとのユーザーのデフォルト数 (およびトランザクション) は 50 で、最良のパフォーマンスが得られますが、上書きが可能です (下記参照)。単一ファイルへのエクスポートでは、エクスポート全体とインポートごとに 1 つのトランザクションが使用され、ユーザーが大量のパフォーマンスが低下します。
暗号化されていないディレクトリーにエクスポートするには、以下を使用できます。
bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=<DIR TO EXPORT TO>
単一の JSON ファイルにエクスポートするには、以下を使用できます。
bin/standalone.sh -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=<FILE TO EXPORT TO>
同様に、インポートには export
の代わりに -Dkeycloak.migration.action=import
を使用します。以下は、インポート例です。
bin/standalone.sh -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=<FILE TO IMPORT> -Dkeycloak.migration.strategy=OVERWRITE_EXISTING
その他の利用可能なオプションは以下のとおりです。
- -Dkeycloak.migration.realmName
- このプロパティーは、all ではなく、指定したレルムだけをエクスポートする場合に使用されます。指定されていない場合は、すべてのレルムがエクスポートされます。
- -Dkeycloak.migration.usersExportStrategy
このプロパティーは、ユーザーのエクスポートされる場所を指定するために使用されます。以下の値が使用できます。
- DIFFERENT_FILES: ファイルごとのユーザーの最大数に応じて、ユーザーは異なるファイルにエクスポートされます。これはデフォルト値です。
- SKIP: ユーザーのエクスポートは完全にスキップされます。
- REALM_FILE: すべてのユーザーはレルム設定で同じファイルにエクスポートされます。(結果は、レルムデータとユーザーの両方を持つ「foo-realm.json」などのファイルになります。)
- SAME_FILE: すべてのユーザーは、同じファイルにエクスポートされますが、レルムファイルとは異なります。(結果は、レルムデータを含む「foo-realm.json」および「foo-users.json」などのファイルとなります。)
- -Dkeycloak.migration.usersPerFile
- このプロパティーは、ファイルごとにユーザー数 (および DB トランザクションごと) を指定するために使用されます。デフォルトで 50 になります。これは、usersExportStrategy が DIFFERENT_FILES である場合にのみ使用されます。
- -Dkeycloak.migration.strategy
このプロパティーは、インポート中に使用されます。同じ名前のレルムがデータをインポートするデータベースに存在する場合に、続行する方法を指定できます。以下の値が使用できます。
- IGNORE_EXISTING: この名前のレルムがすでに存在する場合には、インポートを無視します。
- OVERWRITE_EXISTING: 既存のレルムを削除して、JSON ファイルから新しいデータでインポートします。1 つの環境を別の環境に完全移行して、新しい環境に同じデータが含まれていることを確認する場合は、これを指定できます。
これまでにエクスポートされなかったレルムファイルをインポートする場合、keycloak.import
オプションを使用できます。複数のレルムファイルをインポートする必要がある場合は、ファイル名のコンマ区切りリストを指定できます。これは、マスターレルムが初期化された後にのみ行われるため、前のケースよりも適しています。例:
- -Dkeycloak.import=/tmp/realm1.json
- -Dkeycloak.import=/tmp/realm1.json,/tmp/realm2.json
16.1. 管理コンソールのエクスポート/インポート
ほとんどのリソースのインポートは、管理コンソールから実行したり、ほとんどのリソースをエクスポートすることもできます。ユーザーのエクスポートはサポートされていません。
シークレットまたはプライベート情報を含む属性はエクスポートファイルでマスクされます。そのため、管理コンソールから取得したファイルのエクスポートファイルは、バックアップやサーバー間のデータ転送には適していません。ブートタイムエクスポートのみが適切です。
また、「startup」エクスポート中に作成されたファイルを使用して、管理 UI からインポートすることもできます。これにより、あるレルムから別のレルムにエクスポートして、別のレルムにインポートできます。または、あるサーバーからエクスポートして、別のサーバーにインポートできます。
管理コンソールのエクスポート/インポートでは、ファイルごとに 1 つのレルムのみが許可されます。
管理コンソールのインポートにより、選択した場合はリソースを「上書き」することができます。特に本番環境ではこの機能を使用してください。通常、Admin Console Export 操作から .json ファイルはシークレットの無効な値が含まれるため、データのインポートには適切ではありません。
管理コンソールのエクスポートを使用すると、クライアント、グループ、およびロールをエクスポートできます。レルムにこれらのアセットが多数ある場合は、操作が完了するのに時間がかかる場合があります。この間、サーバーがユーザーリクエストに応答しなくなることがあります。特に本番環境ではこの機能を使用してください。
第17章 Vault を使用したシークレットの取得
管理サポートの複数のフィールドは、外部 vault からシークレットの値を取得します。
直接入力せずに vault からシークレットを取得するには、特別に作成された文字列を適切なフィールドに入力します。${vault.key}
。key
は vault が認識されているシークレット名で置き換えます。
レルム間でシークレットのリークを防ぐために、実装は vault 式から取得した key
とレルム名を組み合わせる場合があります。つまり、key
は vault のエントリーに直接マップせず、レルム名と組み合わせるために使用されるアルゴリズムに従って最終的なエントリー名を作成するために使用されます。
現時点で、シークレットは以下のフィールドで vault から取得できます。
- SMTP パスワード
- レルム SMTP 設定
- LDAP バインド認証情報
- LDAP ベースのユーザーフェデレーションの LDAP 設定
- OIDC アイデンティティープロバイダーシークレット
- アイデンティティープロバイダーの OpenID Connect Config 内のクライアントシークレット
vault を使用するには、Red Hat Single Sign-On 内に vault プロバイダーを登録する必要があります。以下で説明されているビルトインプロバイダーを使用するか、または独自のプロバイダーを実装することができます。詳細は、『サーバー開発者ガイド』を参照してください。
Red Hat Single Sign-On インスタンスごとに最大 1 つの vault プロバイダーが指定され、クラスター内の各インスタンスの vault プロバイダーを一貫して設定する必要があります。
17.1. Kubernetes / OpenShift Files Plaintext Vault Provider
Red Hat Single Sign-On は、Kubernetes シークレット の vault 実装をサポートします。これらのシークレットはデータボリュームとしてマウントでき、フラットなファイル構造を持つディレクトリーとして表示され、各シークレットはシークレット名の付いたファイルで表され、そのファイルの内容はシークレットの値になります。
このディレクトリー内のファイルは、レルム名とアンダースコアがついたシークレット名として指定する必要があります。シークレット名またはレルム名内のすべてのアンダースコアは、ファイル名で 2 倍にする必要があります。たとえば、sso_realm
というレルム内のフィールドの場合、secret-name
という名前のシークレットへの参照は ${vault.secret-name}
と記述され、ファイル名が sso__realm_secret-name
になります (レルム名でアンダースコアが 2 倍)。
このタイプのシークレットストアを使用するには、standalone.xml で files-plaintext
vault プロバイダーを宣言し、マウントされたボリュームが含まれるディレクトリーにパラメーターを設定する必要があります。以下の例は、Red Hat Single Sign-On ベースディレクトリーとの関連で、vault ファイルが standalone/configuration/vault
に設定されたディレクトリーを含む files-plaintext
プロバイダーを示しています。
<spi name="vault"> <default-provider>files-plaintext</default-provider> <provider name="files-plaintext" enabled="true"> <properties> <property name="dir" value="${jboss.home.dir}/standalone/configuration/vault/" /> </properties> </provider> </spi>
以下は、CLI コマンドを使用して同等の設定です。
/subsystem=keycloak-server/spi=vault/:add /subsystem=keycloak-server/spi=vault/provider=files-plaintext/:add(enabled=true,properties={dir => "${jboss.home.dir}/standalone/configuration/vault"})
17.2. Elytron クレデンシャルストア Vault プロバイダー
Red Hat Single Sign-On は、Elytron クレデンシャルストアに保存されたシークレットの読み取りもサポートします。elytron-cs-keystore
vault プロバイダーは、クレデンシャルストアのキーストアベースの実装からシークレットを取得できます。これは Elytron によって提供されるデフォルトの実装でもあります。
この認証情報ストアはキーストアによってサポートされます (JCEKS
はデフォルトの形式ですが、PKCS12
などの他の形式を使用)。ユーザーは WildFly/JBoss EAP の elytron
サブシステムを使用するか、elytron-tool.sh
スクリプトを使用してストアコンテンツを作成および管理できます。
このプロバイダーを使用するには、keycloak-server
サブシステムで elytron-cs-keystore
を宣言し、Elytron によって作成されたキーストアの場所とマスターシークレットを設定する必要があります。プロバイダーの最小限の設定例:
<spi name="vault"> <default-provider>elytron-cs-keystore</default-provider> <provider name="elytron-cs-keystore" enabled="true"> <properties> <property name="location" value="${jboss.home.dir}/standalone/configuration/vault/credential-store.jceks" /> <property name="secret" value="secretpw1!"/> </properties> </provider> </spi>
基となるキーストアの形式が JCEKS
以外の場合は、keyStoreType
を使用してこの形式に通知する必要があります。
<spi name="vault"> <default-provider>elytron-cs-keystore</default-provider> <provider name="elytron-cs-keystore" enabled="true"> <properties> <property name="location" value="${jboss.home.dir}/standalone/configuration/vault/credential-store.p12" /> <property name="secret" value="secretpw1!"/> <property name="keyStoreType" value="PKCS12"/> </properties> </provider> </spi>
シークレットの場合、elytron-cs-keystore
プロバイダーはクリアテキスト値 (上記のように) と elytron-tool.sh
スクリプトを使用してマスクされた値の両方をサポートします。
<spi name="vault"> ... <property name="secret" value="MASK-3u2HNQaMogJJ8VP7J6gRIl;12345678;321"/> ... </spi>
elytron クレデンシャルストアの作成/管理方法や、キーストアシークレットをマスクする方法に関する詳細は、Elytron のドキュメントを参照してください。
elytron-cs-keystore
vault プロバイダーが WildFly 拡張として実装されており、Red Hat Single Sign-On サーバーが WildFly/JBoss EAP で実行されている場合にのみ利用可能です。
17.3. キーリゾルバー
すべてのビルトインプロバイダーは、1 つ以上のキーリゾルバーの設定をサポートします。キーリゾルバーは、基本的にはレルム名とキーを組み合わせて (${vault.key}
式から取得)、vault からシークレットの取得に使用される最終エントリー名を組み合わせるためのアルゴリズムまたはストラテジーを実装します。keyResolvers
プロパティーは、プロバイダーによって使用されるリゾルバーを設定するために使用されます。この値は、リゾルバー名のコンマ区切りリストです。files-plaintext
プロバイダーの設定例を以下に示します。
<spi name="vault"> <default-provider>files-plaintext</default-provider> <provider name="files-plaintext" enabled="true"> <properties> <property name="dir" value="${jboss.home.dir}/standalone/configuration/vault/" /> <property name="keyResolvers" value="REALM_UNDERSCORE_KEY, KEY_ONLY"/> </properties> </provider> </spi>
リゾルバーは、設定で宣言されるのと同じ順序で実行されます。それぞれのリゾルバーについて、レルムと vault キーを組み合わせるリゾルバーによって生成された最終エントリー名は vault のシークレットの検索に使用されます。シークレットが見つかると、すぐに返されます。そうでない場合には、次のリゾルバーが使用され、空でないシークレットが見つかるか、またはすべてのリゾルバーが試行されるまで継続され、空のシークレットが返されます。上記の例では、最初に REALM_UNDERSCORE_KEY
リゾルバーが使用されます。生成する名前の vault にエントリーが存在する場合は、そのエントリーが返されます。そうでない場合は、KEY_ONLY
リゾルバーが使用されます。生成する名前の vault にエントリーが存在する場合は、そのエントリーが返されます。これがないと、使用されるリゾルバーがなくなったため、空のシークレットが返されます。
現在利用可能なリゾルバーの一覧は以下のようになります。
-
KEY_ONLY
: レルム名は無視され、vault 式からのキーがそのまま使用されます。 -
REALM_UNDERSCORE_KEY
: レルムと鍵はアンダースコア_
を使用して結合されます。レルムまたはキーのいずれかでアンダースコアが存在する点は、別のアンダースコアでエスケープされます。したがって、レルムがmaster_realm
と呼ばれ、キーがsmtp_key
の場合は、組み合わせたキーはmaster__realm_smtp__key
になります。 -
REALM_FILESEPARATOR_KEY
: レルムと鍵は、プラットフォームファイルの区切り文字を使用して組み合わせます。これは、ディレクトリー構造を使用してレルムでキーを分類する場合に便利です。
ビルトインプロバイダーにリゾルバーが設定されていない場合、REALM_UNDERSCORE_KEY
はデフォルトで選択されます。
17.4. 設定例
以下は、vault およびクレデンシャルストアの設定例になります。この手順には、以下の 2 つの部分が含まれます。
- クレデンシャルストアおよび vault を作成すると、クレデンシャルストアと vault パスワードはプレーンテキストになります。
-
クレデンシャルストアと vault を更新して、パスワードは
elytron-tool.sh
によって提供されるマスクを使用します。
この例では、使用されるテストターゲットは BIND DN credential: secret12
を持つ LDAP インスタンスです。ターゲットは、レルム ldaptest
のユーザーフェデレーションを使用してマッピングされます。
17.4.1. マスクなしでクレデンシャルストアおよび vault を設定
クレデンシャルストアおよび vault のパスワードがプレーンテキストである vault を作成します。
前提条件
-
実行中の LDAP インスタンスには
BIND DN 認証情報(secret12)があります
。 -
エイリアスは、デフォルトのキーリゾルバーの使用時に <realm-name>_< key-value> 形式を使用します。この場合、インスタンスはレルム
ldaptest で、ldaptest
_ldap_secret
は、そのレルムのldap_secret
の値に対応するエイリアスです。
リゾルバーは、レルムおよびキー名のダブルアンダースコア文字に置き換えられます。たとえば、ldap test_ldap_secret
キーの場合、最終キーは ldaptest_ldap__secret になります
。
手順
Elytron クレデンシャルストアを作成します。
[standalone@localhost:9990 /] /subsystem=elytron/credential-store=test-store:add(create=true, location=/home/test/test-store.p12, credential-reference={clear-text=testpwd1!},implementation-properties={keyStoreType=PKCS12})
クレデンシャルストアにエイリアスを追加します。
/subsystem=elytron/credential-store=test-store:add-alias(alias=ldaptest_ldap__secret,secret-value=secret12)
リゾルバーによって鍵
ldaptest_ldap__secret
がダブルアンダースコアが使用されるかに注目してください。Elytron によって生成されたキーストアの内容を検証するため、認証情報ストアからエイリアスを一覧表示します。
keytool -list -keystore /home/test/test-store.p12 -storetype PKCS12 -storepass testpwd1! Keystore type: PKCS12 Keystore provider: SUN Your keystore contains 1 entries ldaptest_ldap__secret/passwordcredential/clear/, Oct 12, 2020, SecretKeyEntry,
Red Hat Single Sign-On で vault SPI を設定します。
/subsystem=keycloak-server/spi=vault:add(default-provider=elytron-cs-keystore) /subsystem=keycloak-server/spi=vault/provider=elytron-cs-keystore:add(enabled=true, properties={location=>/home/test/test-store.p12, secret=>testpwd1!, keyStoreType=>PKCS12})
この時点で、vault およびクレデンシャルストアのパスワードはマスクされません。
<spi name="vault"> <default-provider>elytron-cs-keystore</default-provider> <provider name="elytron-cs-keystore" enabled="true"> <properties> <property name="location" value="/home/test/test-store.p12"/> <property name="secret" value="testpwd1!"/> <property name="keyStoreType" value="PKCS12"/> </properties> </provider> </spi> <credential-stores> <credential-store name="test-store" location="/home/test/test-store.p12" create="true"> <implementation-properties> <property name="keyStoreType" value="PKCS12"/> </implementation-properties> <credential-reference clear-text="testpwd1!"/> </credential-store> </credential-stores>
-
LDAP プロバイダーにおいて、bin
DN の認証情報は
${vault.ldap_secret}
に置き換えます。 LDAP 接続をテストします。
LDAP Vault
17.4.2. クレデンシャルストアおよび vault でのパスワードのマスク
クレデンシャルストアおよび vault を更新して、elytron-tool.sh
によって提供されるマスクを使用するパスワードを取得できるようになりました。
salt
およびiteration
パラメーターの値を使用してマスクされたパスワードを作成します。$ EAP_HOME/bin/elytron-tool.sh mask --salt SALT --iteration ITERATION_COUNT --secret PASSWORD
たとえば、以下のようになります。
elytron-tool.sh mask --salt 12345678 --iteration 123 --secret testpwd1! MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123
マスクされたパスワードを使用するように Elytron クレデンシャルストア設定を更新します。
/subsystem=elytron/credential-store=cs-store:write-attribute(name=credential-reference.clear-text,value="MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123")
Red Hat Single Sign-On vault 設定を更新して、マスクされたパスワードを使用します。
/subsystem=keycloak-server/spi=vault/provider=elytron-cs-keystore:remove() /subsystem=keycloak-server/spi=vault/provider=elytron-cs-keystore:add(enabled=true, properties={location=>/home/test/test-store.p12, secret=>”MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123”, keyStoreType=>PKCS12})
vault および認証情報ストアがマスクされました。
<spi name="vault"> <default-provider>elytron-cs-keystore</default-provider> <provider name="elytron-cs-keystore" enabled="true"> <properties> <property name="location" value="/home/test/test-store.p12"/> <property name="secret" value="MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123"/> <property name="keyStoreType" value="PKCS12"/> </properties> </provider> </spi> .... ..... <credential-stores> <credential-store name="test-store" location="/home/test/test-store.p12" create="true"> <implementation-properties> <property name="keyStoreType" value="PKCS12"/> </implementation-properties> <credential-reference clear-text="MASK-3BUbFEyWu0lRAu8.fCqyUk;12345678;123"/> </credential-store> </credential-stores>
-
これで、
${vault.ldap_secret}
を使用して LDAP への接続をテストすることができます。
関連情報
Elytron ツールの詳細は、「Elytron クライアントでのクレデンシャルストアの使用」を参照してください。
第18章 ユーザーアカウントサービス
Red Hat Single Sign-On には、すべてのユーザーがアクセス可能なユーザーアカウントサービスが組み込まれています。このサービスを使用すると、ユーザーはアカウントの管理、認証情報の変更、プロファイルの更新、ログインセッションの表示が可能です。このサービスの URL は <server-root>/auth/realms/{realm-name}/account
です。
アカウントサービス
最初のページは、左側のメニュー項目 Account
であるユーザーのプロファイルです。これは、これらについての基本的なデータを指定する場所です。この画面を拡張して、ユーザーが追加の属性を管理できるようにします。詳細は『サーバー開発者ガイド』を参照してください。
左側のメニュー項目 Password
では、ユーザーはパスワードを変更できます。
パスワードの更新
Authenticator
メニューアイテムを使用すると、必要に応じて OTP をセットアップできます。これは、OTP がレルムに対して有効な認証メカニズムである場合にのみ表示されます。ユーザーには、FreeOTP または Google Authenticator をモバイルデバイスにインストールして OTP ジェネレーターとしてインストールする指示があります。画面の スナップショット に表示される QR コードは、適切なセットアップと簡単な設定を行うと、FreeOTP または Google Authenticator のモバイルアプリケーションにスキャンできます。
OTP Authenticator
Federated Identity
メニューアイテムは、ユーザーが自身のアカウントを ID ブローカーとリンクできます (これは通常、ソーシャルプロバイダーアカウントとリンクするのに使用されます)。これで、レルムに設定した外部アイデンティティープロバイダーの一覧が表示されます。
フェデレーションされたアイデンティティー
Sessions
メニューアイテムは、ログインしているデバイスや、どこからでも表示および管理できるようにします。この画面からセッションのログアウトも実行できます。
セッション
Applications
メニュー項目には、アクセスできるアプリケーションが表示されます。
アプリケーション
18.1. Themeable
Red Hat Single Sign-On のすべての UI と同様に、User Account サービスは完全にテーマで相互運用可能となっています。詳細は『サーバー開発者ガイド』を参照してください。
第19章 脅威モデルの軽減策
本章では、認証サーバーの予想されるセキュリティー脆弱性と Red Hat Single Sign-On による脆弱性を軽減する方法を説明します。潜在的な脆弱性の詳細の一覧と、これらを軽減するセキュリティー実装は、IETF が配置される OAuth 2.0 Threat Model ドキュメントにあります。ここで、これらの脆弱性の多くについて話し合います。
19.1. Host
Red Hat Single Sign-On では、パブリックのホスト名を使用します。たとえば、トークン発行者フィールドおよび URL で、パスワードリセットメールで送信されます。
デフォルトでは、ホスト名は要求ヘッダーをベースにしており、このホスト名が有効であることを確認するためのチェックはありません。
無効なホストヘッダーを阻止する Red Hat Single Sign-On の前にロードバランサーまたはプロキシーを使用しない場合、受け入れすべきホスト名を明示的に設定する必要があります。
Hostname SPI は、要求のホスト名の設定方法を提供します。初期状態のプロバイダーでは、フロントエンドリクエストの固定 URL を設定し、バックエンド要求をリクエスト URI を基にすることを許可します。組み込みプロバイダーが必要な機能を提供しない場合に、独自のプロバイダーを開発することもできます。
19.2. 管理エンドポイントおよびコンソール
Red Hat Single Sign-On 管理 REST API と Web コンソールはデフォルトで、管理者以外のユーザーと同じポートで公開されます。管理コンソールへのアクセスが必要ない場合は、インターネットで管理エンドポイントを公開しないことが推奨されます。
これは、Red Hat Single Sign-On で直接、または Apache または nginx などのプロキシーを使用して実現できます。
プロキシーオプションについては、プロキシーのドキュメントを参照してください。/auth/admin
への要求へのアクセスを制御する必要があります。
Red Hat Single Sign-On で直接これを行うには、いくつかのオプションがあります。本書では、IP の制限と別個のポートの 2 つのオプションについて説明します。
管理コンソールが Keycloak のフロントエンド URL でアクセスできなくなったら、デフォルトのホスト名プロバイダーで固定管理 URL を設定する必要があります。
19.2.1. IP の制限
/auth/admin
へのアクセスを特定の IP アドレスだけに制限することができます。
以下の例では、/auth/admin
へのアクセスを、10.0.0.1
から 10.0.0.255
の範囲の IP アドレスに制限しています。
<subsystem xmlns="urn:jboss:domain:undertow:10.0"> ... <server name="default-server"> ... <host name="default-host" alias="localhost"> ... <filter-ref name="ipAccess"/> </host> </server> <filters> <expression-filter name="ipAccess" expression="path-prefix('/auth/admin') -> ip-access-control(acl={'10.0.0.0/24 allow'})"/> </filters> ... </subsystem>
CLI コマンドを使用した同等の設定:
/subsystem=undertow/configuration=filter/expression-filter=ipAccess:add(,expression="path-prefix[/auth/admin] -> ip-access-control(acl={'10.0.0.0/24 allow'})") /subsystem=undertow/server=default-server/host=default-host/filter-ref=ipAccess:add()
プロキシーを使用している場合の IP 制限には、Red Hat Single Sign-On がプロキシー IP アドレスではなくクライアントの IP アドレスを受信しないように適切に設定することが重要になります。
19.2.2. ポート制限
/auth/admin
をインターネット上で公開されていない別のポートに公開することができます。
以下の例では、ポート 8444
で /auth/admin
を公開しますが、デフォルトポート 8443
でアクセスが許可されません。
<subsystem xmlns="urn:jboss:domain:undertow:10.0"> ... <server name="default-server"> ... <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/> <https-listener name="https-admin" socket-binding="https-admin" security-realm="ApplicationRealm" enable-http2="true"/> <host name="default-host" alias="localhost"> ... <filter-ref name="portAccess"/> </host> </server> <filters> <expression-filter name="portAccess" expression="path-prefix('/auth/admin') and not equals(%p, 8444) -> response-code(403)"/> </filters> ... </subsystem> ... <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> ... <socket-binding name="https" port="${jboss.https.port:8443}"/> <socket-binding name="https-admin" port="${jboss.https.port:8444}"/> ... </socket-binding-group>
CLI コマンドを使用した同等の設定:
/socket-binding-group=standard-sockets/socket-binding=https-admin/:add(port=8444) /subsystem=undertow/server=default-server/https-listener=https-admin:add(socket-binding=https-admin, security-realm=ApplicationRealm, enable-http2=true) /subsystem=undertow/configuration=filter/expression-filter=portAccess:add(,expression="path-prefix('/auth/admin') and not equals(%p, 8444) -> response-code(403)") /subsystem=undertow/server=default-server/host=default-host/filter-ref=portAccess:add()
19.3. パスワード推測: ブルートフォース攻撃
ブルートフォース攻撃は、攻撃者がユーザーのパスワードの推測を試みる際に行われます。Red Hat Single Sign-On では、ブルートフォート検出機能が限定されています。オンになっていると、ログイン失敗のしきい値に達すると、ユーザーアカウントが一時的に無効になります。この機能を有効にするには、Realm Settings
の左側のメニュー項目に移動し、Security Defenses
タブをクリックしてから Brute Force Detection
サブタブに移動します。
Brute Force Detection (ブルートフォース検出) は、デフォルトでは無効になっています。この機能を有効にすると、このタイプの攻撃から保護することを強く推奨します。
Brute Force Detection
ブルートを強制的に検出するには、2 つの異なる設定、永続的なロックアウト、および一時ロックアウトがあります。永続的なロックアウトは、攻撃を検出した後にユーザーのアカウントを無効にします。管理者が有効にするまでアカウントは無効になります。一時的なロックアウトは、攻撃の検出後に期間にユーザーのアカウントを無効にします。アカウントが無効の期間は、攻撃が続行されます。
一般的なパラメーター
- 最大ログイン失敗
- 許可されるログイン失敗の最大数。デフォルト値は 30 です。
- クイックログインチェックミリ秒
- ログインの試行間の最小時間。デフォルトは 1000 です。
- 最小クイックスタートの待機
- ログインの試行が Quick Login Check Milli Seconds よりも速い場合に、ユーザーが一時的に無効になる最小時間。デフォルトは 1 分です。
一時的なロックアウトパラメーター
- 待機インクリメント
- 最大ログイン失敗数 に達した後に、ユーザーが無効になるまでの期間が一時的に無効化される時間。デフォルトは 1 分です。
- 最大待機
- ユーザーを一時的に無効にする最大時間。デフォルトは 15 分です。
- 失敗リセット時間
- 失敗数がリセットされる時間。最後に失敗したログインからタイマーが実行されます。デフォルトは 12 時間です。
永続的なロックアウトアルゴリズム
正常なログイン時
-
count
のリセット
-
ログインの失敗
-
count
のインクリメント count
が Max Login Failures を超える数の場合- ユーザーを完全に無効にする
この失敗と最後の失敗の間にかかる時間は、Quick Login Check Milli Seconds より小さい場合
- 最小クイックログイン待機のユーザーを一時的に無効にする
-
ユーザーを無効にすると、管理者がユーザーを有効にするまでログインできません。アカウントの count
リセット数を有効化してください。
一時的なロックアウトアルゴリズム
正常なログイン時
-
count
のリセット
-
ログインの失敗
この失敗と最後の失敗間の時間が失敗リセットの時間よりも大きい場合
-
count
のリセット
-
-
count
のインクリメント -
Wait Increment * (
count
/ Max Login Failures) を使用してwait
を計算します。除算は整数除算であるため、常に整数に丸められます。 wait
時間がゼロで、この失敗から最後の失敗までの時間が Quick Login Check Milli Seconds よりも小さい場合は、代わりにwait
を Minimum Quick Login Wait に設定してください。-
wait
秒および Max Wait 秒の短い方のユーザーを一時的に無効にします。
-
ユーザーを一時的に無効にした場合にログインに失敗しても、count
は増えません。
Red Hat Single Sign-On のブルート検出では、サーバーがサービス拒否攻撃に対して脆弱であることです。攻撃者は、認識しているアカウントの入力を単純に推測できるため、これらのアカウントは無効になります。ユーザーをブロックするかどうかを決定する際には、最終的にこの機能を拡張してクライアント IP アドレスを考慮します。
優れたオプションは、Fail2Ban などのツールになります。このサービスは、Red Hat Single Sign-On サーバーのログファイルでポイントできます。Red Hat Single Sign-On は、障害があるすべてのログインの失敗およびクライアント IP アドレスをログに記録します。Fail2Ban を使用して、特定の IP アドレスからの接続をブロックする攻撃を検知した後に、ファイアウォールを変更するために使用できます。
19.3.1. パスワードポリシー
もう 1 つでは、パスワード推測を防止するために、複雑なパスワードポリシーを確保して、ユーザーがパスワードの推測が困難であるようにします。詳細は、「パスワードポリシー」 の章を参照してください。
パスワード推測を防ぐ最善の方法は、サーバーがワンタイムパスワード (OTP) を使用するように設定することです。
19.4. クリックジャッキング
クリックジャッキングでは、悪意のあるサイトは、攻撃対象サイトの重要なボタンの下にダミーのボタンが配置されるように注意深く構築された透明な iframe に攻撃対象のサイトを読み込みます。ユーザーが見えるボタンを押すと、実際には隠されたページのボタン (たとえばログインボタン) がクリックされます。攻撃者はユーザーの認証情報を窃取し、リソースにアクセスすることが出来ます。
デフォルトでは、Red Hat Single Sign-On の応答はすべて、これが発生することを防止できるいくつかの特定のブラウザーヘッダーを設定します。具体的には、X-FRAME_OPTIONS および Content-Security-Policy を設定します。制御できる詳細なブラウザーアクセスが多数あるため、これらのヘッダーの両方の定義を確認する必要があります。管理コンソールでは、これらのヘッダーの任意の値を指定できます。左側のメニュー項目 Realm Settings
に移動し、Security Defenses
タブをクリックして Headers
サブタブに遷移してください。
デフォルトでは、Red Hat Single Sign-On は、iframes に same-origin ポリシーのみを設定します。
19.5. SSL/HTTPS 要件
Red Hat Single Sign-On 認証サーバーと、セキュリティーが保護されたクライアントとの間の通信に SSL/HTTPS を使用しないと、攻撃の対象となる可能性が非常に脆弱になります。OAuth 2.0/OpenID Connect はセキュリティーにアクセストークンを使用します。SSL/HTTPS を使用しないと、攻撃者がネットワークを傍受してアクセストークンを取得することが可能です。アクセストークンを取得した後に、トークンに与えられたパーミッションの任意の操作を実行できます。
Red Hat Single Sign-On には、SSL/HTTPS 用に 3 つのモードがあります。SSL は設定が難しくなります。そのため、追加設定なしで Red Hat Single Sign-On では、localhost、192.168.x.x などのプライベート IP アドレスに対する HTTPS 以外の通信を許可します。実稼働環境では、オンボード全体で SSL が有効かつ必須になっている必要があります。
アダプター/クライアント側で、Red Hat Single Sign-On では SSL トラストマネージャーをオフにできます。トラストマネージャーは、クライアントが通信している ID を保証します。これは、DNS ドメイン名をサーバーの証明書に対して確認します。実稼働環境では、各クライアントアダプターがトラストストアを使用するように設定されていることを確認してください。そうしない場合は、中間攻撃で DNS の man に対して脆弱です。
19.6. CSRF Attacks
クロスサイトリクエストフォージェリー (CSRF) は、web ベースの攻撃で、web サイトが信頼できるユーザーまたは (HTTP リダイレクトや HTML フォームを介してなど) で認証される web ベースの攻撃です。クッキーベースの認証を使用するすべてのサイトは、これらの攻撃に対する攻撃に対して脆弱です。これらの攻撃は、投稿されたフォームまたはクエリーパラメーターに対して状態クッキーを照合することで軽減されます。
OAuth 2.0 ログイン仕様では、状態 cookie を使用し、伝送された状態 state パラメーターと照合する必要があります。すべてのログインが保護されるように、Red Hat Single Sign-On は仕様のこの部分を完全に実装します。
Red Hat Single Sign-On 管理コンソールは、バックエンド Red Hat Single Sign-On 管理 REST API への REST 呼び出しを行う純粋な JavaScript/HTML5 アプリケーションです。これらの呼び出しはすべて必要なベアラートークン認証が必要で、JavaScript Ajax 呼び出しを介して行われます。ここでは、CSRF は適用されません。管理 REST API も、CORS オリジンを検証するように設定することもできます。
CSRF にフォールバックする Red Hat Single Sign-On の唯一の部分は、ユーザーアカウント管理ページです。この Red Hat Single Sign-On を軽減するには、状態クッキーを設定し、アクションリンクの非表示フォームフィールドやクエリーパラメーターにこの状態クッキーの値を埋め込むこともできます。このクエリーまたは形式パラメーターは、ユーザーが呼び出しが作成されたことを検証するために状態クッキーに対してチェックされます。
19.7. 特定のリダイレクト URI
Authorization Code Flow では、一般的過ぎるリダイレクト URI を登録すると、アクセス範囲が広範囲に及ぶ異なるクライアントの権限になりすますことが可能です。これは、2 つのクライアントが同じドメインに存在する場合に生じる可能性があります。したがって、登録できるリダイレクト URI を実行可能とするのが得策です。
19.8. 不正アクセスおよびトークンの更新
アクセストークンを軽減し、stolen からトークンを更新する方法がいくつかあります。最も重要なことは、Red Hat Single Sign-On とクライアントおよびアプリケーション間の SSL/HTTPS 通信を適用することです。Red Hat Single Sign-On では SSL が有効化されていないため、管理者は明らかになる可能性もあります。
リークしたアクセストークンを軽減するもう 1 つのことは、寿命を短くすることです。これは、タイムアウトページ 内で指定できます。クライアントおよびアプリケーションのアクセストークンの短い寿命 (分) は、アクセストークンを更新した後にアクセストークンを更新します。管理者がリークを検出すると、すべてのサービスセッションをログアウトして、これらの更新トークンを無効にするか、取り消しポリシーを設定できます。更新トークンは常にクライアントにプライベートのままとなり、送信されることは非常に重要ではありません。
また、漏洩したアクセストークンに対して軽減し、トークンを更新するために、これらのトークンをホルダートークンの holder-of-key トークンとして発行します。詳細は、「OAuth 2.0 相互 TLS クライアント証明書バインドアクセストークン」を参照してください。
アクセストークンまたは更新トークンが漏洩された場合、まず管理コンソールに移動し、すべてのアプリケーションに not-before 失効ポリシーをプッシュする必要があります。これにより、その日付の前に発行されたすべてのトークンが無効になります。新しい not-before ポリシーをプッシュすると、アプリケーションが Red Hat Single Sign-On から新しい公開鍵を強制的にダウンロードするようにするため、レルム署名鍵の危険にさらされたと考えると、この状況にも役立ちます。詳細は、キーの章を参照してください。
また、これらのエンティティーの 1 つが完全に不正アクセスされている場合は、特定のアプリケーション、クライアント、ユーザーを無効にすることもできます。
19.9. 侵害された認証コード
OIDC Auth Code Flow では、攻撃者が Red Hat Single Sign-On 認証コードに攻撃することは非常に困難になります。Red Hat Single Sign-On は、承認コードに対して暗号で強固なランダムな値を生成するため、アクセストークンを推測することが非常に困難になります。承認コードは、アクセストークンの取得に 1 回のみ使用できます。管理コンソールでは、タイムアウトページで承認コードが有効である期間を指定できます。この値は数秒で短いため、クライアントがコードからトークンを取得するのに十分な時間で短くする必要があります。
PKCE をクライアントに適用して、リークした自動化コードに対して軽減することもできます。詳細は、「PKCE (Proof Key for Code Exchange)」を参照してください。
19.10. オープンリダイレクター
攻撃者は、エンドユーザーの承認エンドポイントとリダイレクト URI パラメーターを使用して、オープンリダイレクターとして承認サーバーを悪用することができます。オープンリディレクターは、検証を行わずにユーザーエージェントをパラメーター値で指定された場所に自動的にリダイレクトするパラメーターを使用するエンドポイントです。攻撃者は、承認サーバーでユーザーの信頼を利用してフィッシング攻撃を起動することができます。
Red Hat Single Sign-On では、登録されたすべてのアプリケーションとクライアントで少なくとも 1 つのリダイレクト URI パターンを登録する必要があります。クライアントが (ログインやログアウトなど) リダイレクトの実行を Red Hat Single Sign-On に問い合わせると、Red Hat Single Sign-On がリダイレクト URI をチェックします。有効な登録された URI パターンのリスト。オープンな redirector 攻撃を軽減するために、クライアントおよびアプリケーションが特定の URI パターンとして登録されることが重要です。
19.11. パスワードデータベースの危険にさらされました
Red Hat Single Sign-On は、パスワードを raw のテキストに保存しません。これは、PBKDF2 アルゴリズムを使用してそのハッシュを保存します。実際には、20,000 ハッシュの反復のデフォルトを使用します。これは、セキュリティーコミュニティーの推奨反復数です。これは、設計により PBKDF2 として大きなパフォーマンスヒットに加えて、大量の CPU を加速します。パスワードデータベースを保護するために深刻な設定方法を決定するのはユーザー次第です。
19.12. 制限の範囲
デフォルトでは、各クライアントアプリケーションには無制限の role scope mappings
があります。つまり、そのクライアント用に作成されるすべてのアクセストークンには、ユーザーが持つすべてのパーミッションが含まれます。クライアントが不正アクセスされ、アクセストークンが漏洩されると、各システムのアクセス権限が漏洩されるようになりました。各クライアントの Scope メニューを使用してアクセストークンが割り当てられているロールを制限することが強く推奨されます。または、クライアントスコープレベルでロールスコープマッピングを設定し、Client Scope メニュー でクライアントスコープを割り当てることもできます。
19.13. トークンオーディエンスの制限
サービス間の信頼レベルが低い環境では、トークンのオーディエンスを制限することが推奨されます。この後の理由については OAuth2 Threat Model ドキュメントで説明されています。詳細情報は「オーディエンスサポート」を参照してください。
19.14. SQL インジェクション攻撃
この時点で、Red Hat Single Sign-On の SQL インジェクションの脆弱性に関するナレッジはありません。
第20章 管理 CLI
前述の章では、Red Hat Single Sign-On 管理コンソールを使用して管理タスクを実行する方法を説明しました。また、管理 CLI コマンドラインツールを使用して、コマンドラインインターフェース (CLI) からこれらのタスクを実行することもできます。
20.1. 管理 CLI のインストール
管理 CLI は、Red Hat Single Sign-On Server ディストリビューション内にパッケージ化されます。bin
ディレクトリー内に実行スクリプトを見つけることができます。
Linux スクリプトは kcadm.sh
と呼ばれ、Windows のスクリプトは kcadm.bat
と呼ばれます。
Red Hat Single Sign-On サーバーディレクトリーを PATH
に追加し、ファイルシステム上の任意の場所からクライアントを使用できます。
たとえば、以下のようになります。
- Linux:
$ export PATH=$PATH:$KEYCLOAK_HOME/bin $ kcadm.sh
- Windows:
c:\> set PATH=%PATH%;%KEYCLOAK_HOME%\bin c:\> kcadm
Red Hat Single Sign-On Server ディストリビューションを抽出したパスに KEYCLOAK_HOME
環境変数 (env) 変数が設定されていることを前提とします。
繰り返し実行しないように、本書の残りの部分では、CLI の相違点が kcadm
コマンド名ではなく、Windows の例のみが説明されています。
20.2. 管理 CLI の使用
管理 CLI は、管理 REST エンドポイントに HTTP 要求を行うことで機能します。アクセスは保護されており、認証が必要になります。
特定のエンドポイントの JSON 属性に関する詳細は、Admin REST API のドキュメントを参照してください。
認証情報を指定し、ログインして認証されたセッションを開始します。作成、読み取り、更新、および削除 (CRUD) 操作を実行する準備が整っている。
たとえば、
Linux:
$ kcadm.sh config credentials --server http://localhost:8080/auth --realm demo --user admin --client admin $ kcadm.sh create realms -s realm=demorealm -s enabled=true -o $ CID=$(kcadm.sh create clients -r demorealm -s clientId=my_client -s 'redirectUris=["http://localhost:8980/myapp/*"]' -i) $ kcadm.sh get clients/$CID/installation/providers/keycloak-oidc-keycloak-json
Windows:
c:\> kcadm config credentials --server http://localhost:8080/auth --realm demo --user admin --client admin c:\> kcadm create realms -s realm=demorealm -s enabled=true -o c:\> kcadm create clients -r demorealm -s clientId=my_client -s "redirectUris=[\"http://localhost:8980/myapp/*\"]" -i > clientid.txt c:\> set /p CID=<clientid.txt c:\> kcadm get clients/%CID%/installation/providers/keycloak-oidc-keycloak-json
実稼働環境では、トークンをネットワークスニファーに公開しないようにするには、
https:
で Red Hat Single Sign-On にアクセスする必要があります。Java のデフォルト証明書トラストストアに含まれる信頼される認証局 (CA) のいずれかによってサーバーの証明書が発行されていない場合は、truststore.jks
ファイルを準備し、クライアント登録 CLI にこれを使用するように指示します。たとえば、以下のようになります。
Linux:
$ kcadm.sh config truststore --trustpass $PASSWORD ~/.keycloak/truststore.jks
Windows:
c:\> kcadm config truststore --trustpass %PASSWORD% %HOMEPATH%\.keycloak\truststore.jks
20.3. 認証
管理 CLI でログインしている場合、サーバーエンドポイント URL とレルムを指定し、ユーザー名を指定します。別のオプションとして、clientId のみを指定します。これにより、特別な「サービスアカウント」が使用されます。ユーザー名を使用してログインする場合は、指定したユーザーのパスワードを使用する必要があります。clientId を使用してログインする場合、ユーザーパスワードではなくクライアントシークレットのみが必要になります。クライアントシークレットの代わりに Signed JWT
を使用することもできます。
セッションに使用されるアカウントに、Admin REST API 操作を呼び出すための適切なパーミッションがあることを確認してください。たとえば、realm-management
クライアントの realm-admin
ロールを指定すると、ユーザーはユーザーが定義されているレルムを管理できます。
認証には、主に 2 つのメカニズムがあります。1 つのメカニズムは kcadm config credentials
を使用して認証セッションを開始します。
$ kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin
このアプローチでは、取得したアクセストークンと関連する更新トークンを保存することで、kcadm
コマンド呼び出し間の認証セッションを維持します。プライベート設定ファイルで他のシークレットを保持することもできます。設定ファイルの詳細は、次の章を参照してください。
2 つ目のアプローチでは、呼び出しの間に各コマンド呼び出しが認証されるだけです。この方法では、トークンの取得でラウンドトリップで費やした時間がサーバーの負荷と長くなります。このアプローチの利点は、呼び出し間でトークンを保存する必要はありません。つまり、ディスクには保存されません。このモードは、--no-config
引数の指定時に使用されます。
たとえば、操作の実行時に、認証に必要な情報をすべて指定します。
$ kcadm.sh get realms --no-config --server http://localhost:8080/auth --realm master --user admin --password admin
管理 CLI の使用に関する詳細情報は、kcadm.sh help
コマンドを実行します。
認証セッションの開始に関する詳細は、kcadm.sh config credentials --help
コマンドを実行します。
20.4. 代替設定の使用
デフォルトでは、管理 CLI はユーザーのホームディレクトリー下に置かれた kcadm.config
という設定ファイルを自動的に維持します。Linux ベースのシステムでは、完全パス名は $HOME/.keycloak/kcadm.config
になります。Windows では、完全パス名は %HOMEPATH%\.keycloak\kcadm.config
になります。--config
オプションを使用して、異なるファイルまたは場所を指定して、複数の認証セッションを並行して管理することができます。
単一のスレッドから単一の設定ファイルに関連付けられる操作を実行することが推奨されます。
システムの他のユーザーが設定ファイルを表示しないようにしてください。これには、プライベートに保持される必要のあるアクセストークンおよびシークレットが含まれます。デフォルトでは、~/.keycloak
ディレクトリーおよびそのコンテンツは適切なアクセス制限で自動的に作成されます。ディレクトリーがすでに存在する場合、そのパーミッションは更新されません。
設定ファイル内にシークレットを保存しないようにする必要がある場合は、これを実行できます。都合は低く、トークンリクエストをより多く作成する必要があります。シークレットを保存しない場合は、すべてのコマンドで --no-config
オプションを使用し、各 kcadm
呼び出しで config credentials
コマンドに必要なすべての認証情報を指定します。
20.5. 基本操作およびリソース URI
管理 CLI では、特定のタスクの実行を簡素化する追加のコマンドを使用して、管理 REST API エンドポイントに対して CRUD 操作を汎用で実行することができます。
主な使用パターンを以下に示します。ここで、create
、get
、update
、および delete
コマンドは HTTP 動詞である POST
、GET
、PUT
、および DELETE
にそれぞれマッピングされます。
$ kcadm.sh create ENDPOINT [ARGUMENTS] $ kcadm.sh get ENDPOINT [ARGUMENTS] $ kcadm.sh update ENDPOINT [ARGUMENTS] $ kcadm.sh delete ENDPOINT [ARGUMENTS]
ENDPOINT はターゲットリソースURI であり、絶対 (http:
または https:
で始まる) または相対のいずれかで、次の形式の絶対 URL を構成するために使用されます。
SERVER_URI/admin/realms/REALM/ENDPOINT
たとえば、サーバー http://localhost:8080/auth に対して認証し、レルムが master
である場合は、users
を ENDPOINT として使用するとリソース URL http://localhost:8080/auth/admin/realms/master/users となります。
ENDPOINT を clients
に設定する場合、有効なリソース URI は http://localhost:8080/auth/admin/realms/master/clients になります。
レルムのコンテナーであるため、処理が若干異なる realms
エンドポイントがあります。以下に対して解決します。
SERVER_URI/admin/realms
また、レルムに依存していないため、serverinfo
エンドポイントも同じ方法として処理されます。
realm-admin 権限を持つユーザーとして認証する場合は、複数のレルムでコマンドを実行する必要がある場合があります。この場合は、コマンドが実行するレルムを明示的に指示する -r
オプションを指定します。kcadm.sh config credentials
の --realm
オプションで指定された REALM
を使用する代わりに、TARGET_REALM
が使用されます。
SERVER_URI/admin/realms/TARGET_REALM/ENDPOINT
以下に例を示します。
$ kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password admin $ kcadm.sh create users -s username=testuser -s enabled=true -r demorealm
この例では、master
レルムで admin
ユーザーとして認証されたセッションを開始します。その後、リソース URL http://localhost:8080/auth/admin/realms/demorealm/users
に対して POST 呼び出しを実行します。
create
および update
コマンドは、デフォルトで JSON ボディーをサーバーに送信します。-f FILENAME
を使用して、ファイルから既製のドキュメントを読み取ることができます。-f -
オプションを使用すると、メッセージの本文が標準入力から読み込まれます。前述の「ユーザーの作成」
例で説明したように個別の属性とそれらの値を指定することもできます。これらは JSON ボディーによって構成され、サーバーに送信されます。
update
コマンドを使用してリソースを更新する方法は複数あります。まず、リソースの現在の状態を決定してファイルに保存し、そのファイルを編集して更新のためにサーバーに送信できます。
以下に例を示します。
$ kcadm.sh get realms/demorealm > demorealm.json $ vi demorealm.json $ kcadm.sh update realms/demorealm -f demorealm.json
このメソッドは、送信された JSON ドキュメントのすべての属性でサーバーのリソースを更新します。
また、-s, --set
オプションを使用してオンザフライで更新を実行し、新しい値を設定することもできます。
以下に例を示します。
$ kcadm.sh update realms/demorealm -s enabled=false
この方法は、enabled
属性のみを false
に更新します。
デフォルトでは、update
コマンドは最初に get
を実行し、新しい属性値を既存の値とマージします。これは推奨される動作です。エンドポイントが PUT
コマンドをサポートするかもしれませんが、GET
コマンドではない場合もあります。-n
オプションを使用して「no-merge」更新を実行できます。これは、GET
コマンドを最初に実行せずに PUT
コマンドを実行します。
20.6. レルム操作
新しいレルムの作成
realms
エンドポイントで create
コマンドを使用して、新しい有効なレルムを作成し、属性を realm
および enabled
に設定します。
$ kcadm.sh create realms -s realm=demorealm -s enabled=true
レルムはデフォルトでは有効になっていません。これを有効にすると、認証にレルムをすぐに使用できます。
新規オブジェクトの説明には、JSON 形式を使用することもできます。
$ kcadm.sh create realms -f demorealm.json
レルム属性を使用して JSON ドキュメントをファイルから直接送信するか、または標準入力にパイプして送信できます。
たとえば、以下のようになります。
- Linux:
$ kcadm.sh create realms -f - << EOF { "realm": "demorealm", "enabled": true } EOF
- Windows:
c:\> echo { "realm": "demorealm", "enabled": true } | kcadm create realms -f -
既存のレルムの一覧表示
以下のコマンドは、すべてのレルムのリストを返します。
$ kcadm.sh get realms
レルムの一覧はサーバー上でさらにフィルタリングされ、ユーザーが確認できるレルムのみを返します。
レルムの説明全体を返すと、多くの場合、情報が非常に多すぎます。ほとんどのユーザーは、レルム名やレルムが有効かどうかなど、属性のサブセットのみに関心があります。--fields
オプションを使用して、返す属性を指定できます。
$ kcadm.sh get realms --fields realm,enabled
結果をコンマ区切りの値として表示することもできます。
$ kcadm.sh get realms --fields realm --format csv --noquotes
特定のレルムの取得
レルム名をコレクション URI に追加し、個別のレルムを取得します。
$ kcadm.sh get realms/master
レルムの更新
レルムの属性のみを変更する場合に、
-s
オプションを使用して属性に新しい値を設定します。以下に例を示します。
$ kcadm.sh update realms/demorealm -s enabled=false
新しい値で書き込み可能な属性をすべて設定する場合は、
get
コマンドを実行して、JSON ファイルの現在の値を編集し、resubmit を実行します。以下に例を示します。
$ kcadm.sh get realms/demorealm > demorealm.json $ vi demorealm.json $ kcadm.sh update realms/demorealm -f demorealm.json
レルムの削除
以下のコマンドを実行してレルムを削除します。
$ kcadm.sh delete realms/demorealm
レルムのすべてのログインページオプションをオンにする
特定の機能を制御する属性を true
に設定します。
以下に例を示します。
$ kcadm.sh update realms/demorealm -s registrationAllowed=true -s registrationEmailAsUsername=true -s rememberMe=true -s verifyEmail=true -s resetPasswordAllowed=true -s editUsernameAllowed=true
レルムキーの一覧表示
ターゲットレルムの keys
エンドポイントで get
操作を使用します。
$ kcadm.sh get keys -r demorealm
新しいレルムキーの生成
新しい RSA 生成鍵のペアを追加する前に、ターゲットレルムの ID を取得します。
以下に例を示します。
$ kcadm.sh get realms/demorealm --fields id --format csv --noquotes
kcadm.sh get keys -r demorealm
によって明らかになったように、既存のプロバイダーよりも優先度の高い新規キープロバイダーを追加します。たとえば、以下のようになります。
Linux:
$ kcadm.sh create components -r demorealm -s name=rsa-generated -s providerId=rsa-generated -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s 'config.priority=["101"]' -s 'config.enabled=["true"]' -s 'config.active=["true"]' -s 'config.keySize=["2048"]'
Windows:
c:\> kcadm create components -r demorealm -s name=rsa-generated -s providerId=rsa-generated -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s "config.priority=[\"101\"]" -s "config.enabled=[\"true\"]" -s "config.active=[\"true\"]" -s "config.keySize=[\"2048\"]"
parentId
属性をターゲットレルムの ID の値に設定します。新たに追加されたキーは、
kcadm.sh get keys -r demorealm
によって明らかになったように、アクティブキーになります。
Java キーストアファイルから新しいレルムキーの追加
新しいキープロバイダーを追加して、サーバーに JKS ファイルとしてすでに準備済みの新規キーペアを追加します。
たとえば、以下のようになります。
Linux:
$ kcadm.sh create components -r demorealm -s name=java-keystore -s providerId=java-keystore -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s 'config.priority=["101"]' -s 'config.enabled=["true"]' -s 'config.active=["true"]' -s 'config.keystore=["/opt/keycloak/keystore.jks"]' -s 'config.keystorePassword=["secret"]' -s 'config.keyPassword=["secret"]' -s 'config.alias=["localhost"]'
Windows:
c:\> kcadm create components -r demorealm -s name=java-keystore -s providerId=java-keystore -s providerType=org.keycloak.keys.KeyProvider -s parentId=959844c1-d149-41d7-8359-6aa527fca0b0 -s "config.priority=[\"101\"]" -s "config.enabled=[\"true\"]" -s "config.active=[\"true\"]" -s "config.keystore=[\"/opt/keycloak/keystore.jks\"]" -s "config.keystorePassword=[\"secret\"]" -s "config.keyPassword=[\"secret\"]" -s "config.alias=[\"localhost\"]"
-
特定のキーストアに一致するように、
keystore
、keystorePassword
、keyPassword
、およびalias
属性値を変更するようにしてください。 -
parentId
属性をターゲットレルムの ID の値に設定します。
鍵のパッシブの作成または鍵の無効化
パッシブを作成する鍵を特定します。
$ kcadm.sh get keys -r demorealm
-
キーの
providerId
属性を使用して、components/PROVIDER_ID
などのエンドポイント URI を作成します。 update
を実行します。たとえば、以下のようになります。
Linux:
$ kcadm.sh update components/PROVIDER_ID -r demorealm -s 'config.active=["false"]'
Windows:
c:\> kcadm update components/PROVIDER_ID -r demorealm -s "config.active=[\"false\"]"
他のキー属性を更新できます。
-
新しい
enabled
値を設定してキーを無効にします(例:config.enabled=["false"]
)。 -
新規の
priority
の値を設定し、キーの優先度を変更します (例:config.priority=["110"]
)。
古いキーの削除
- 削除する鍵がパッシブかつ無効になっており、既存のトークンがアプリケーションに保持され、ユーザーが突然失敗するのを防ぎます。
パッシブを作成する鍵を特定します。
$ kcadm.sh get keys -r demorealm
そのキーの
providerId
を使用して削除を実行します。$ kcadm.sh delete components/PROVIDER_ID -r demorealm
レルムのイベントロギングの設定
events/config
エンドポイントで update
コマンドを使用します。
eventsListeners
属性には、イベントを受信するすべてのイベントリスナーを指定する EventListenerProviderFactory ID の一覧が含まれます。個別に、ビルトインイベントストレージを制御する属性があり、管理 REST API 経由で過去のイベントをクエリーできます。サービス呼び出しのロギング (eventsEnabled
) および監査イベントは、管理コンソールまたは管理者 REST API (adminEventsEnabled
) 中にトリガーされる別個のコントロールがあります。データベースに満杯にならないように古いイベントの有効期限を設定することもできます。eventsExpiration
は秒単位で表される持続可能時間に設定されます。
すべてのイベントを受信し、jboss-logging 経由でログに記録する組み込みイベントリスナーの設定例を以下に示します。(org.keycloak.events
と呼ばれるロガーを使用して、エラーイベントは WARN
としてログに記録され、それ以外は DEBUG
としてログに記録されます。)
たとえば、以下のようになります。
- Linux:
$ kcadm.sh update events/config -r demorealm -s 'eventsListeners=["jboss-logging"]'
- Windows:
c:\> kcadm update events/config -r demorealm -s "eventsListeners=[\"jboss-logging\"]"
次に、利用可能なすべての ERROR イベント (監査イベントは含まない) のストレージを 2 日間有効にして、管理 REST 経由で取得できるようにする例を示します。
たとえば、以下のようになります。
- Linux:
$ kcadm.sh update events/config -r demorealm -s eventsEnabled=true -s 'enabledEventTypes=["LOGIN_ERROR","REGISTER_ERROR","LOGOUT_ERROR","CODE_TO_TOKEN_ERROR","CLIENT_LOGIN_ERROR","FEDERATED_IDENTITY_LINK_ERROR","REMOVE_FEDERATED_IDENTITY_ERROR","UPDATE_EMAIL_ERROR","UPDATE_PROFILE_ERROR","UPDATE_PASSWORD_ERROR","UPDATE_TOTP_ERROR","VERIFY_EMAIL_ERROR","REMOVE_TOTP_ERROR","SEND_VERIFY_EMAIL_ERROR","SEND_RESET_PASSWORD_ERROR","SEND_IDENTITY_PROVIDER_LINK_ERROR","RESET_PASSWORD_ERROR","IDENTITY_PROVIDER_FIRST_LOGIN_ERROR","IDENTITY_PROVIDER_POST_LOGIN_ERROR","CUSTOM_REQUIRED_ACTION_ERROR","EXECUTE_ACTIONS_ERROR","CLIENT_REGISTER_ERROR","CLIENT_UPDATE_ERROR","CLIENT_DELETE_ERROR"]' -s eventsExpiration=172800
- Windows:
c:\> kcadm update events/config -r demorealm -s eventsEnabled=true -s "enabledEventTypes=[\"LOGIN_ERROR\",\"REGISTER_ERROR\",\"LOGOUT_ERROR\",\"CODE_TO_TOKEN_ERROR\",\"CLIENT_LOGIN_ERROR\",\"FEDERATED_IDENTITY_LINK_ERROR\",\"REMOVE_FEDERATED_IDENTITY_ERROR\",\"UPDATE_EMAIL_ERROR\",\"UPDATE_PROFILE_ERROR\",\"UPDATE_PASSWORD_ERROR\",\"UPDATE_TOTP_ERROR\",\"VERIFY_EMAIL_ERROR\",\"REMOVE_TOTP_ERROR\",\"SEND_VERIFY_EMAIL_ERROR\",\"SEND_RESET_PASSWORD_ERROR\",\"SEND_IDENTITY_PROVIDER_LINK_ERROR\",\"RESET_PASSWORD_ERROR\",\"IDENTITY_PROVIDER_FIRST_LOGIN_ERROR\",\"IDENTITY_PROVIDER_POST_LOGIN_ERROR\",\"CUSTOM_REQUIRED_ACTION_ERROR\",\"EXECUTE_ACTIONS_ERROR\",\"CLIENT_REGISTER_ERROR\",\"CLIENT_UPDATE_ERROR\",\"CLIENT_DELETE_ERROR\"]" -s eventsExpiration=172800
以下は、保存されたイベントタイプを 利用可能なすべてのイベントタイプ にリセットする方法の例になります。すべてのイベントタイプを列挙するのと同じものになります。
$ kcadm.sh update events/config -r demorealm -s enabledEventTypes=[]
以下は、監査イベントのストレージを有効にする方法の例になります。
$ kcadm.sh update events/config -r demorealm -s adminEventsEnabled=true -s adminEventsDetailsEnabled=true
最新の 100 イベントを取得する方法の例を以下に示します。これらは最新のものから最も古いものへと順序付けられます。
$ kcadm.sh get events --offset 0 --limit 100
以下は、保存されたすべてのイベントを削除する方法の例になります。
$ kcadm delete events
キャッシュのフラッシュ
-
create
コマンドと、clear-realm-cache
、clear-user-cache
、またはclear-keys-cache
のいずれかのエンドポイントを使用します。 realm
をターゲットレルムと同じ値に設定します。以下に例を示します。
$ kcadm.sh create clear-realm-cache -r demorealm -s realm=demorealm $ kcadm.sh create clear-user-cache -r demorealm -s realm=demorealm $ kcadm.sh create clear-keys-cache -r demorealm -s realm=demorealm
エクスポートされた .json ファイルからのレルムのインポート
-
partialImport
エンドポイントでcreate
コマンドを使用します。 -
ifResourceExists
を、FAIL
、SKIP
、OVERWRITE
のいずれかに設定します。 -f
を使用して、エクスポートしたレルムの.json
ファイルを送信します。以下に例を示します。
$ kcadm.sh create partialImport -r demorealm2 -s ifResourceExists=FAIL -o -f demorealm.json
レルムが存在しない場合は、最初に作成する必要があります。
以下に例を示します。
$ kcadm.sh create realms -s realm=demorealm2 -s enabled=true
20.7. ロール操作
レルムロールの作成
roles
エンドポイントを使用してレルムロールを作成します。
$ kcadm.sh create roles -r demorealm -s name=user -s 'description=Regular user with limited set of permissions'
クライアントロールの作成
最初にクライアントを特定し、
get
コマンドを使用してクライアントロールの作成時に利用可能なクライアントを一覧表示します。$ kcadm.sh get clients -r demorealm --fields id,clientId
clientId
属性を使用して、clients/ID/roles
などのエンドポイント URI を構築して新規ロールを作成します。以下に例を示します。
$ kcadm.sh create clients/a95b6af3-0bdc-4878-ae2e-6d61a4eca9a0/roles -r demorealm -s name=editor -s 'description=Editor can edit, and publish any article'
レルムロールの一覧表示
roles
エンドポイントで get
コマンドを使用して、既存のレルムロールを一覧表示します。
$ kcadm.sh get roles -r demorealm
get-roles
コマンドも使用できます。
$ kcadm.sh get-roles -r demorealm
クライアントロールの一覧表示
レルムおよびクライアントロールの一覧表示を簡素化するための専用の get-roles
コマンドがあります。get
コマンドの拡張機能であり、ロールを一覧表示するための追加のセマンティクスと同じように動作します。
get-roles
コマンドを使用して clientId 属性 (--cclientid
オプションを使用) または id
(--cid
オプションを使用) のいずれかを渡して、クライアントロールをリストするクライアントを特定します。
以下に例を示します。
$ kcadm.sh get-roles -r demorealm --cclientid realm-management
特定のレルムロールの取得
get
コマンドおよびロール 名
を使用して、特定のレルムロール (roles/ROLE_NAME
) のエンドポイント URI を作成します。user
は、既存ロールの名前に置き換えます。
以下に例を示します。
$ kcadm.sh get roles/user -r demorealm
特定の get-roles
コマンドを使用して、ロール名 (--rolename
オプションを使用) または ID (--roleid
オプションを使用)を渡すこともできます。
以下に例を示します。
$ kcadm.sh get-roles -r demorealm --rolename user
特定のクライアントロールの取得
専用の get-roles
コマンドを使用して clientId 属性 (--cclientid
オプションを使用) または ID (--cid
オプションを使用) のいずれかを渡してクライアントを特定し、ロール名 (--rolename
オプションを使用) または ID (--roleid
経由) のいずれかを渡します。
以下に例を示します。
$ kcadm.sh get-roles -r demorealm --cclientid realm-management --rolename manage-clients
レルムロールの更新
特定のレルムロールを取得するために使用した同じエンドポイント URI で update
コマンドを使用します。
以下に例を示します。
$ kcadm.sh update roles/user -r demorealm -s 'description=Role representing a regular user'
クライアントロールの更新
update
コマンドを、特定のクライアントロールの取得に使用したのと同じエンドポイント URI で使用します。
以下に例を示します。
$ kcadm.sh update clients/a95b6af3-0bdc-4878-ae2e-6d61a4eca9a0/roles/editor -r demorealm -s 'description=User that can edit, and publish articles'
レルムロールの削除
特定のレルムロールを取得するために使用した同じエンドポイント URI で delete
コマンドを使用します。
以下に例を示します。
$ kcadm.sh delete roles/user -r demorealm
クライアントロールの削除
特定のクライアントロールを取得するために使用したエンドポイント URI で delete
コマンドを使用します。
以下に例を示します。
$ kcadm.sh delete clients/a95b6af3-0bdc-4878-ae2e-6d61a4eca9a0/roles/editor -r demorealm
複合ロールに割り当てられている、利用可能、有効なレルムロールの一覧表示
複合ロールに割り当てられ、利用可能な、有効なレルムロールを一覧表示するには、専用の get-roles
コマンドを使用します。
複合ロールに 割り当てられた レルムロールを一覧表示するには、(
--rname
オプション) または ID (--rid
オプション) のいずれかで、ターゲットの複号ロールを指定できます。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --rname testrole
有効な レルムロールの一覧を表示するには、追加の
--effective
オプションを使用します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --rname testrole --effective
--available
オプションを使用して、複合ロールに追加できるレルムロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --rname testrole --available
複合ロールに割り当てられている、利用可能、有効なクライアントロールの一覧表示
複合ロールに割り当てられ、利用可能な、有効なクライアントロールを一覧表示するには、専用の get-roles
コマンドを使用します。
複合ロールに 割り当てられた クライアントロールを一覧表示するには、名前 (
--rname
オプション) または ID (--rid
オプション) のいずれかでターゲット複号ロールを指定し、clientId 属性 (--cclientid
オプションを使用) または ID (--cid
オプションを使用) のいずれかでターゲット複合ロールを指定できます。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --rname testrole --cclientid realm-management
有効な レルムロールの一覧を表示するには、追加の
--effective
オプションを使用します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --rname testrole --cclientid realm-management --effective
--available
オプションを使用して、ターゲット複合ロールに追加できるレルムロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --rname testrole --cclientid realm-management --available
レルムロールの複合ロールへの追加
レルムロールおよびクライアントロールの追加に使用できる専用の add-roles
コマンドがあります。
以下の例では、user
ロールを複合ロール testrole
に追加します。
$ kcadm.sh add-roles --rname testrole --rolename user -r demorealm
複合ロールからのレルムロールの削除
レルムロールおよびクライアントロールの削除に使用できる専用の remove-roles
コマンドがあります。
以下の例では、ターゲット複合ロール testrole
から user
ロールを削除します。
$ kcadm.sh remove-roles --rname testrole --rolename user -r demorealm
クライアントロールのレルムロールへの追加
レルムロールおよびクライアントロールの追加に使用できる専用の add-roles
コマンドを使用します。
以下の例では、クライアント realm-management
に定義したロールを追加します。create-client
ロールおよび view-users
ロールに定義されたロールを testrole
複合ロールに追加します。
$ kcadm.sh add-roles -r demorealm --rname testrole --cclientid realm-management --rolename create-client --rolename view-users
クライアントロールへのクライアントロールの追加
get-roles
コマンドを使用して、複合クライアントロールの ID を確認します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --cclientid test-client --rolename operations
-
test-client
の clientId 属性と、support
と呼ばれるクライアントロール、およびoperations
と呼ばれる別のクライアントロールがあるクライアントがあります。これは、複合ロールになり、ID は「fc400897-ef6a-4e8c-872b-1581b7fa8a71」となります。 以下の例を使用して、別のロールを複合ロールに追加します。
$ kcadm.sh add-roles -r demorealm --cclientid test-client --rid fc400897-ef6a-4e8c-872b-1581b7fa8a71 --rolename support
get-roles --all
コマンドを使用して、複合ロールのロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles --rid fc400897-ef6a-4e8c-872b-1581b7fa8a71 --all
複合ロールからのクライアントロールの削除
専用の remove-roles
コマンドを使用して、複合ロールからクライアントロールを削除します。
以下の例を使用して、クライアントの realm-management
で定義された 2 つのロールを削除します (create-client
ロールと view-users
ロール) を testrole
複合ロールから削除します。
$ kcadm.sh remove-roles -r demorealm --rname testrole --cclientid realm-management --rolename create-client --rolename view-users
クライアントロールのグループへの追加
レルムロールおよびクライアントロールの追加に使用できる専用の add-roles
コマンドを使用します。
以下の例では、クライアント realm-management
に定義したロールを追加します。create-client
ロールおよび view-users
ロールを Group
グループ (--gname
オプション) に追加します。代わりに、グループを ID で指定できます (--gid
オプションを使用)。
グループに対して実行できる操作の詳細は、「グループ操作」を参照してください。
$ kcadm.sh add-roles -r demorealm --gname Group --cclientid realm-management --rolename create-client --rolename view-users
グループからのクライアントロールの削除
専用の remove-roles
コマンドを使用して、クライアントロールをグループから削除します。
以下の例を使用して、クライアントの realm-management
で定義された 2 つのロールを削除します (create-client
ロールと view-users
ロールを Group
グループから削除します)。
グループに対して実行できる操作の詳細は、「グループ操作」を参照してください。
$ kcadm.sh remove-roles -r demorealm --gname Group --cclientid realm-management --rolename create-client --rolename view-users
20.8. クライアント操作
クライアントの作成
クライアントエンドポイントで
create
コマンドを実行して、新しいclients
エンドポイントを作成します。以下に例を示します。
$ kcadm.sh create clients -r demorealm -s clientId=myapp -s enabled=true
認証するアダプターのシークレットを設定する場合は、シークレットを指定します。
以下に例を示します。
$ kcadm.sh create clients -r demorealm -s clientId=myapp -s enabled=true -s clientAuthenticatorType=client-secret -s secret=d0b8122f-8dfb-46b7-b68a-f5cc4e25d000
クライアントの一覧表示
clients
エンドポイントで get
コマンドを使用してクライアントを一覧表示します。
以下に例を示します。
$ kcadm.sh get clients -r demorealm --fields id,clientId
この例では、出力をフィルタリングして、id
および clientId
属性のみを一覧表示します。
特定のクライアントの取得
クライアントの ID を使用して、クライアント/ID
などの特定のクライアントをターゲットとするエンドポイント URI を作成します。
以下に例を示します。
$ kcadm.sh get clients/c7b8547f-e748-4333-95d0-410b76b3f4a3 -r demorealm
特定クライアントの現在のシークレットの取得
クライアントの ID を使用して、client/ID/client-secret
などのエンドポイント URI を作成します。
以下に例を示します。
$ kcadm.sh get clients/$CID/client-secret
特定クライアントのアダプター設定ファイル (keycloak.json) の取得
クライアントの ID を使用して、clients/ID/installation/providers/keycloak-oidc-keycloak-json
などの特定のクライアントをターゲットとするエンドポイント URI を作成します。
以下に例を示します。
$ kcadm.sh get clients/c7b8547f-e748-4333-95d0-410b76b3f4a3/installation/providers/keycloak-oidc-keycloak-json -r demorealm
特定クライアントの WildFly サブシステムアダプター設定の取得
クライアントの ID を使用して、clients/ID/installation/providers/keycloak-oidc-jboss-subsystem
などの特定のクライアントをターゲットとするエンドポイント URI を作成します。
以下に例を示します。
$ kcadm.sh get clients/c7b8547f-e748-4333-95d0-410b76b3f4a3/installation/providers/keycloak-oidc-jboss-subsystem -r demorealm
特定クライアントの Docker-v2 の設定例
クライアントの ID を使用して、clients/ID/installation/providers/docker-v2-compose-yaml
などの特定のクライアントをターゲットとするエンドポイント URI を作成します。
応答は in.zip
形式になることに注意してください。
以下に例を示します。
$ kcadm.sh get http://localhost:8080/auth/admin/realms/demorealm/clients/8f271c35-44e3-446f-8953-b0893810ebe7/installation/providers/docker-v2-compose-yaml -r demorealm > keycloak-docker-compose-yaml.zip
クライアントの更新
update
コマンドを、特定のクライアントを取得するために使用したのと同じエンドポイント URI で使用します。
たとえば、以下のようになります。
- Linux:
$ kcadm.sh update clients/c7b8547f-e748-4333-95d0-410b76b3f4a3 -r demorealm -s enabled=false -s publicClient=true -s 'redirectUris=["http://localhost:8080/myapp/*"]' -s baseUrl=http://localhost:8080/myapp -s adminUrl=http://localhost:8080/myapp
- Windows:
c:\> kcadm update clients/c7b8547f-e748-4333-95d0-410b76b3f4a3 -r demorealm -s enabled=false -s publicClient=true -s "redirectUris=[\"http://localhost:8080/myapp/*\"]" -s baseUrl=http://localhost:8080/myapp -s adminUrl=http://localhost:8080/myapp
クライアントの削除
特定のクライアントを取得するために使用したエンドポイント URI で delete
コマンドを使用します。
以下に例を示します。
$ kcadm.sh delete clients/c7b8547f-e748-4333-95d0-410b76b3f4a3 -r demorealm
クライアントのサービスアカウントのロールの追加または削除
クライアントのサービスアカウントは、ユーザー名 service-account-CLIENT_ID
を持つ特別なユーザーアカウントです。このアカウントでユーザーの操作は、通常ユーザーであるかのように実行できます。
20.9. ユーザー操作
ユーザーの作成
users
エンドポイントで create
コマンドを実行して新規ユーザーを作成します。
以下に例を示します。
$ kcadm.sh create users -r demorealm -s username=testuser -s enabled=true
ユーザーの一覧表示
users
エンドポイントを使用してユーザーを一覧表示します。次回ログイン時に、ターゲットユーザーはパスワードを変更する必要があります。
以下に例を示します。
$ kcadm.sh get users -r demorealm --offset 0 --limit 1000
username
、firstName
、lastName
、または email
でユーザーを絞り込むことができます。
以下に例を示します。
$ kcadm.sh get users -r demorealm -q email=google.com $ kcadm.sh get users -r demorealm -q username=testuser
フィルタリングは完全一致を使用しません。たとえば、上記の例は、*testuser*
パターンに対する username
属性の値と一致します。
複数の属性でフィルターをかけることも可能です。これは、すべての属性の条件と一致するユーザーのみを返す、-q
オプションを指定して行います。
特定ユーザーの取得
ユーザーの ID を使用して、users/USER_ID
などのエンドポイント URI を作成します。
以下に例を示します。
$ kcadm.sh get users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2 -r demorealm
ユーザーの更新
update
コマンドを、特定のクライアントを取得するために使用したのと同じエンドポイント URI で使用します。
たとえば、以下のようになります。
- Linux:
$ kcadm.sh update users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2 -r demorealm -s 'requiredActions=["VERIFY_EMAIL","UPDATE_PROFILE","CONFIGURE_TOTP","UPDATE_PASSWORD"]'
- Windows:
c:\> kcadm update users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2 -r demorealm -s "requiredActions=[\"VERIFY_EMAIL\",\"UPDATE_PROFILE\",\"CONFIGURE_TOTP\",\"UPDATE_PASSWORD\"]"
ユーザーの削除
delete
コマンドを、特定のクライアントを取得するために使用したのと同じエンドポイント URI で使用します。
以下に例を示します。
$ kcadm.sh delete users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2 -r demorealm
ユーザーのパスワードのリセット
専用の set-password
コマンドを使用して、ユーザーのパスワードをリセットします。
以下に例を示します。
$ kcadm.sh set-password -r demorealm --username testuser --new-password NEWPASSWORD --temporary
このコマンドは、ユーザーに一時パスワードを設定します。次回ログイン時に、ターゲットユーザーはパスワードを変更する必要があります。
id
属性を使用してユーザーを指定する場合は、--userid
を使用できます。
users/USER_ID/reset-password
など、特定のユーザーから構築されたエンドポイントで update
コマンドを使用すると同じ結果が得られます。
以下に例を示します。
$ kcadm.sh update users/0ba7a3fd-6fd8-48cd-a60b-2e8fd82d56e2/reset-password -r demorealm -s type=password -s value=NEWPASSWORD -s temporary=true -n
最後のパラメーター (-n
) は、前の GET
コマンドなしで PUT
コマンドのみが実行されるようにします。reset-password
エンドポイントは GET
をサポートしないため、このインスタンスには必要です。
ユーザーに割り当てられている利用可能で有効なレルムロールの一覧表示
ユーザーに割り当てられ、利用可能な、有効なレルムロールを一覧表示するには、専用の get-roles
コマンドを使用できます。
ユーザーに 割り当てられた レルムロールを一覧表示するには、ユーザー名または ID のいずれかでターゲットユーザーを指定します。
以下に例を示します。
$ kcadm.sh get-roles -r demorealm --uusername testuser
有効な レルムロールの一覧を表示するには、追加の
--effective
オプションを使用します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --uusername testuser --effective
--available
オプションを使用して、ユーザーに追加できるレルムロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --uusername testuser --available
ユーザーに割り当てられている利用可能で有効なクライアントロールの一覧表示
ユーザーに割り当てられ、利用可能な、有効なクライアントロールを一覧表示するには、専用の get-roles
コマンドを使用します。
ユーザー名 (
--uusername
オプション) または ID (--uid
オプション) のいずれかでターゲットユーザーを指定し、clientId 属性 (--cclientid
オプション) または ID (--cid
オプション) のいずれかでクライアントを指定して、そのユーザーに対する assigned クライアントロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --uusername testuser --cclientid realm-management
有効な レルムロールの一覧を表示するには、追加の
--effective
オプションを使用します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --uusername testuser --cclientid realm-management --effective
--available
オプションを使用して、ユーザーに追加できるレルムロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --uusername testuser --cclientid realm-management --available
レルムロールのユーザーへの追加
レルムロールをユーザーに追加するには、専用の add-roles
コマンドを使用します。
以下の例を使用して、user
ロールを testuser
ユーザーに追加します。
$ kcadm.sh add-roles --uusername testuser --rolename user -r demorealm
ユーザーからのレルムロールの削除
ユーザーからレルムロールを削除するには、専用の remove-roles
コマンドを使用します。
以下の例を使用して、ユーザー testuser
から user
ロールを削除します。
$ kcadm.sh remove-roles --uusername testuser --rolename user -r demorealm
クライアントロールのユーザーへの追加
専用の add-roles
コマンドを使用して、クライアントロールをユーザーに追加します。
以下の例を使用して、クライアントの レルム管理
で定義された 2 つのロールを追加します (create-client
ロールと view-users
ロールをユーザー testuser
に追加します)。
$ kcadm.sh add-roles -r demorealm --uusername testuser --cclientid realm-management --rolename create-client --rolename view-users
ユーザーからのクライアントロールの削除
専用の remove-roles
コマンドを使用して、クライアントロールをユーザーから削除します。
以下の例を使用して、レルム管理クライアントで定義された 2 つのロールを削除します。
$ kcadm.sh remove-roles -r demorealm --uusername testuser --cclientid realm-management --rolename create-client --rolename view-users
ユーザーのセッションの一覧表示
-
ユーザーの ID を特定し、これを使用して
users/ID/sessions
などのエンドポイント URI を作成します。 get
コマンドを使用して、ユーザーのセッションの一覧を取得します。以下に例を示します。
$kcadm get users/6da5ab89-3397-4205-afaa-e201ff638f9e/sessions
特定のセッションからユーザーをログアウト
- 上記のようにセッションの ID を決定します。
-
セッションの ID を使用して、
sessions/ID
などのエンドポイント URI を作成します。 delete
コマンドを使用してセッションを無効にします。以下に例を示します。
$ kcadm.sh delete sessions/d0eaa7cc-8c5d-489d-811a-69d3c4ec84d1
全セッションからユーザーをログアウト
users/ID/logout
などのエンドポイント URI を作成するには、ユーザーの ID が必要です。
create
コマンドを使用して、そのエンドポイント URI で POST
を実行します。
以下に例を示します。
$ kcadm.sh create users/6da5ab89-3397-4205-afaa-e201ff638f9e/logout -r demorealm -s realm=demorealm -s user=6da5ab89-3397-4205-afaa-e201ff638f9e
20.10. グループ操作
グループの作成
groups
エンドポイントで create
コマンドを使用して新規グループを作成します。
以下に例を示します。
$ kcadm.sh create groups -r demorealm -s name=Group
グループの一覧表示
groups
エンドポイントで get
コマンドを使用してグループの一覧を表示します。
以下に例を示します。
$ kcadm.sh get groups -r demorealm
特定グループの取得
グループの ID を使用して、groups/GROUP_ID
などのエンドポイント URI を作成します。
以下に例を示します。
$ kcadm.sh get groups/51204821-0580-46db-8f2d-27106c6b5ded -r demorealm
グループの更新
update
コマンドを、特定のユーザーを取得するために使用したのと同じエンドポイント URI で使用します。
以下に例を示します。
$ kcadm.sh update groups/51204821-0580-46db-8f2d-27106c6b5ded -s 'attributes.email=["group@example.com"]' -r demorealm
グループの削除
delete
コマンドを、特定のグループを取得するために使用したのと同じエンドポイント URI で使用します。
以下に例を示します。
$ kcadm.sh delete groups/51204821-0580-46db-8f2d-27106c6b5ded -r demorealm
サブグループの作成
グループを一覧表示して親グループの ID を見つけ、その ID を使用して groups/GROUP_ID/children
などのエンドポイント URI を作成します。
以下に例を示します。
$ kcadm.sh create groups/51204821-0580-46db-8f2d-27106c6b5ded/children -r demorealm -s name=SubGroup
別のグループでのグループの移動
- 既存の親グループの ID と既存の子グループの ID を検索します。
-
親グループの ID を使用して
groups/PARENT_GROUP_ID/children
などのエンドポイント URI を作成します。 -
このエンドポイントで
create
コマンドを実行し、子グループの ID を JSON の本文として渡します。
以下に例を示します。
$ kcadm.sh create groups/51204821-0580-46db-8f2d-27106c6b5ded/children -r demorealm -s id=08d410c6-d585-4059-bb07-54dcb92c5094
特定ユーザーのグループを取得する
ユーザーの ID を使用してグループ内のユーザーのメンバーシップを判別し、users/USER_ID/groups
などのエンドポイント URI を作成します。
以下に例を示します。
$ kcadm.sh get users/b544f379-5fc4-49e5-8a8d-5cfb71f46f53/groups -r demorealm
グループへのユーザーの追加
users/USER_ID/groups/GROUP_ID
などのユーザーの ID とグループの ID で構成されるエンドポイント URI で update
コマンドを使用し、ユーザーをグループに追加します。
以下に例を示します。
$ kcadm.sh update users/b544f379-5fc4-49e5-8a8d-5cfb71f46f53/groups/ce01117a-7426-4670-a29a-5c118056fe20 -r demorealm -s realm=demorealm -s userId=b544f379-5fc4-49e5-8a8d-5cfb71f46f53 -s groupId=ce01117a-7426-4670-a29a-5c118056fe20 -n
グループからのユーザーの削除
users/USER_ID/groups/GROUP_ID
などのグループにユーザーを追加するのに使用するエンドポイント URI で delete
コマンドを使用し、グループからユーザーを削除します。
以下に例を示します。
$ kcadm.sh delete users/b544f379-5fc4-49e5-8a8d-5cfb71f46f53/groups/ce01117a-7426-4670-a29a-5c118056fe20 -r demorealm
グループに割り当てられている利用可能で有効なレルムロールの一覧表示
専用の get-roles
コマンドを使用して、グループに割り当てられた、利用可能かつ有効なレルムロールを一覧表示します。
ターゲットグループを名前 (via the
--gname
オプション)、パス ([command]--gpath
オプション)、または ID (--gid
オプション) で 指定して、グループに割り当てられた レルムロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --gname Group
有効な レルムロールの一覧を表示するには、追加の
--effective
オプションを使用します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --gname Group --effective
--available
オプションを使用して、グループに追加可能なレルムロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --gname Group --available
グループに割り当てられた、利用可能、有効なクライアントロールの一覧表示
グループに割り当てられ、利用可能な、有効なクライアントロールを一覧表示するには、専用の get-roles
コマンドを使用します。
名前 (
--gname
オプション) または ID (--gid
オプション) のいずれかでターゲットグループを指定し、clientId 属性 ([command]--cclientid
オプション) または ID (--id
オプション) のいずれかでクライアントを指定して、そのユーザーに対する 割り当てられた クライアントロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --gname Group --cclientid realm-management
有効な レルムロールの一覧を表示するには、追加の
--effective
オプションを使用します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --gname Group --cclientid realm-management --effective
--available
オプションを使用して、グループに追加可能なレルムロールを一覧表示します。以下に例を示します。
$ kcadm.sh get-roles -r demorealm --gname Group --cclientid realm-management --available
20.11. アイデンティティープロバイダー操作
利用可能なアイデンティティープロバイダーの一覧表示
serverinfo
エンドポイントを使用して利用可能な ID プロバイダーを一覧表示します。
以下に例を示します。
$ kcadm.sh get serverinfo -r demorealm --fields 'identityProviders(*)'
serverinfo
エンドポイントは、特定のレルム外に存在するため、ターゲットレルムとの対比で解決されないという点で realms
エンドポイントと同様に処理されます。
設定済みのアイデンティティープロバイダーの一覧表示
identity-provider/instances
エンドポイントを使用します。
以下に例を示します。
$ kcadm.sh get identity-provider/instances -r demorealm --fields alias,providerId,enabled
特定の設定されたアイデンティティープロバイダーの取得
アイデンティティープロバイダーの alias
属性を使用して、identity-provider/instances/ALIAS
などのエンドポイント URI を作成して特定のアイデンティティープロバイダーを取得します。
以下に例を示します。
$ kcadm.sh get identity-provider/instances/facebook -r demorealm
特定の設定されたアイデンティティープロバイダーの削除
delete
コマンドを、特定の設定済みのアイデンティティープロバイダーを取得するために使用した同じエンドポイント URI で使用して、特定の設定済みのアイデンティティープロバイダーを削除します。
以下に例を示します。
$ kcadm.sh delete identity-provider/instances/facebook -r demorealm
Keycloak OpenID Connect アイデンティティープロバイダーの設定
-
新規 ID プロバイダーインスタンスの作成時に、
keycloak-oidc
をproviderId
として使用します。 config
属性を指定します (authorizationUrl
、tokenUrl
、clientId
、およびclientSecret
)。以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=keycloak-oidc -s providerId=keycloak-oidc -s enabled=true -s 'config.useJwksUrl="true"' -s config.authorizationUrl=http://localhost:8180/auth/realms/demorealm/protocol/openid-connect/auth -s config.tokenUrl=http://localhost:8180/auth/realms/demorealm/protocol/openid-connect/token -s config.clientId=demo-oidc-provider -s config.clientSecret=secret
OpenID Connect ID プロバイダーの設定
providerId
属性値を oidc
に設定した場合を除き、Keycloak OpenID Connect プロバイダーを設定する方法で汎用 OpenID Connect プロバイダーを設定します。
SAML 2 アイデンティティープロバイダーの設定
-
saml
をproviderId
として使用します。 -
config
属性 (singleSignOnServiceUrl
、nameIDPolicyFormat
、signatureAlgorithm
) を提供します。
以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=saml -s providerId=saml -s enabled=true -s 'config.useJwksUrl="true"' -s config.singleSignOnServiceUrl=http://localhost:8180/auth/realms/saml-broker-realm/protocol/saml -s config.nameIDPolicyFormat=urn:oasis:names:tc:SAML:2.0:nameid-format:persistent -s config.signatureAlgorithm=RSA_SHA256
Facebook アイデンティティープロバイダーの設定
-
facebook
をproviderId
として使用します。 config
属性 (clientId
およびclientSecret
) を指定します。これらの属性は、アプリケーションの Facebook Developers アプリケーション構成ページにあります。以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=facebook -s providerId=facebook -s enabled=true -s 'config.useJwksUrl="true"' -s config.clientId=FACEBOOK_CLIENT_ID -s config.clientSecret=FACEBOOK_CLIENT_SECRET
Google ID プロバイダーの設定
-
providerId
としてgoogle
を使用します。 config
属性 (clientId
およびclientSecret
) を指定します。これらの属性は、アプリケーションの Google Developers アプリケーション設定ページで確認できます。以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=google -s providerId=google -s enabled=true -s 'config.useJwksUrl="true"' -s config.clientId=GOOGLE_CLIENT_ID -s config.clientSecret=GOOGLE_CLIENT_SECRET
Twitter アイデンティティープロバイダーの設定
-
twitter
をproviderId
として使用します。 config
属性 (clientId
およびclientSecret
) を指定します。これらの属性は、アプリケーションの Twitter Application Management アプリケーション設定ページにあります。以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=google -s providerId=google -s enabled=true -s 'config.useJwksUrl="true"' -s config.clientId=TWITTER_API_KEY -s config.clientSecret=TWITTER_API_SECRET
GitHub ID プロバイダーの設定
-
github
をproviderId
として使用します。 config
属性 (clientId
およびclientSecret
) を指定します。これらの属性は、アプリケーションの GitHub Developer Application Settings ページにあります。以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=github -s providerId=github -s enabled=true -s 'config.useJwksUrl="true"' -s config.clientId=GITHUB_CLIENT_ID -s config.clientSecret=GITHUB_CLIENT_SECRET
LinkedIn アイデンティティープロバイダーの設定
-
linkedin
をproviderId
として使用します。 config
属性 (clientId
およびclientSecret
) を指定します。これらの属性は、アプリケーションの LinkedIn Developer Console アプリケーションページにあります。以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=linkedin -s providerId=linkedin -s enabled=true -s 'config.useJwksUrl="true"' -s config.clientId=LINKEDIN_CLIENT_ID -s config.clientSecret=LINKEDIN_CLIENT_SECRET
Microsoft Live アイデンティティープロバイダーの設定
-
microsoft
をproviderId
として使用します。 config
属性clientId
およびclientSecret
を指定します。これらの属性は、アプリケーションの Microsoft Application Registration Portal ページにあります。以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=microsoft -s providerId=microsoft -s enabled=true -s 'config.useJwksUrl="true"' -s config.clientId=MICROSOFT_APP_ID -s config.clientSecret=MICROSOFT_PASSWORD
Stack Overflow アイデンティティープロバイダーの設定
-
stackoverflow
コマンドをproviderId
として使用します。 config
属性 (clientId
、clientSecret
、およびkey
) を指定します。これらの属性は、アプリケーションの Stack Apps OAuth ページにあります。以下に例を示します。
$ kcadm.sh create identity-provider/instances -r demorealm -s alias=stackoverflow -s providerId=stackoverflow -s enabled=true -s 'config.useJwksUrl="true"' -s config.clientId=STACKAPPS_CLIENT_ID -s config.clientSecret=STACKAPPS_CLIENT_SECRET -s config.key=STACKAPPS_KEY
20.12. ストレージプロバイダー操作
Kerberos ストレージプロバイダーの設定
-
components
エンドポイントに対してcreate
コマンドを使用します。 -
レルム ID を
parentId
属性の値として指定します。 -
kerberos
をproviderId
属性値として指定し、org.keycloak.storage.UserStorageProvider
をproviderType
属性値として指定します。 以下に例を示します。
$ kcadm.sh create components -r demorealm -s parentId=demorealmId -s id=demokerberos -s name=demokerberos -s providerId=kerberos -s providerType=org.keycloak.storage.UserStorageProvider -s 'config.priority=["0"]' -s 'config.debug=["false"]' -s 'config.allowPasswordAuthentication=["true"]' -s 'config.editMode=["UNSYNCED"]' -s 'config.updateProfileFirstLogin=["true"]' -s 'config.allowKerberosAuthentication=["true"]' -s 'config.kerberosRealm=["KEYCLOAK.ORG"]' -s 'config.keyTab=["http.keytab"]' -s 'config.serverPrincipal=["HTTP/localhost@KEYCLOAK.ORG"]' -s 'config.cachePolicy=["DEFAULT"]'
LDAP ユーザーストレージプロバイダーの設定
-
components
エンドポイントに対してcreate
コマンドを使用します。 -
ldap
をproviderId
属性の値に、org.keycloak.storage.UserStorageProvider
をproviderType
属性値として指定します。 -
レルム ID を
parentId
属性の値として指定します。 以下の例を使用して、Kerberos が統合する LDAP プロバイダーを作成します。
$ kcadm.sh create components -r demorealm -s name=kerberos-ldap-provider -s providerId=ldap -s providerType=org.keycloak.storage.UserStorageProvider -s parentId=3d9c572b-8f33-483f-98a6-8bb421667867 -s 'config.priority=["1"]' -s 'config.fullSyncPeriod=["-1"]' -s 'config.changedSyncPeriod=["-1"]' -s 'config.cachePolicy=["DEFAULT"]' -s config.evictionDay=[] -s config.evictionHour=[] -s config.evictionMinute=[] -s config.maxLifespan=[] -s 'config.batchSizeForSync=["1000"]' -s 'config.editMode=["WRITABLE"]' -s 'config.syncRegistrations=["false"]' -s 'config.vendor=["other"]' -s 'config.usernameLDAPAttribute=["uid"]' -s 'config.rdnLDAPAttribute=["uid"]' -s 'config.uuidLDAPAttribute=["entryUUID"]' -s 'config.userObjectClasses=["inetOrgPerson, organizationalPerson"]' -s 'config.connectionUrl=["ldap://localhost:10389"]' -s 'config.usersDn=["ou=People,dc=keycloak,dc=org"]' -s 'config.authType=["simple"]' -s 'config.bindDn=["uid=admin,ou=system"]' -s 'config.bindCredential=["secret"]' -s 'config.searchScope=["1"]' -s 'config.useTruststoreSpi=["ldapsOnly"]' -s 'config.connectionPooling=["true"]' -s 'config.pagination=["true"]' -s 'config.allowKerberosAuthentication=["true"]' -s 'config.serverPrincipal=["HTTP/localhost@KEYCLOAK.ORG"]' -s 'config.keyTab=["http.keytab"]' -s 'config.kerberosRealm=["KEYCLOAK.ORG"]' -s 'config.debug=["true"]' -s 'config.useKerberosForPasswordAuthentication=["true"]'
ユーザーストレージプロバイダーインスタンスの削除
-
ストレージプロバイダーインスタンスの
id
属性を使用して、components/ID
などのエンドポイント URI を作成します。 このエンドポイントに対して
delete
コマンドを実行します。以下に例を示します。
$ kcadm.sh delete components/3d9c572b-8f33-483f-98a6-8bb421667867 -r demorealm
特定のユーザーストレージプロバイダーに対するすべてのユーザーの同期のトリガー
-
ストレージプロバイダーの
id
属性を使用して、user-storage/ID_OF_USER_STORAGE_INSTANCE/sync
などのエンドポイント URI を作成します。 action=triggerFullSync
クエリーパラメーターを追加してcreate
コマンドを実行します。以下に例を示します。
$ kcadm.sh create user-storage/b7c63d02-b62a-4fc1-977c-947d6a09e1ea/sync?action=triggerFullSync
特定のユーザーストレージプロバイダーに対する変更済みのユーザーの同期のトリガー
-
ストレージプロバイダーの
id
属性を使用して、user-storage/ID_OF_USER_STORAGE_INSTANCE/sync
などのエンドポイント URI を作成します。 action=triggerChangedUsersSync
クエリーパラメーターを追加し、create
コマンドを実行します。以下に例を示します。
$ kcadm.sh create user-storage/b7c63d02-b62a-4fc1-977c-947d6a09e1ea/sync?action=triggerChangedUsersSync
LDAP ユーザーのストレージ接続性のテスト
-
testLDAPConnection
エンドポイントでget
コマンドを実行します。 クエリーパラメーター
bindCredential
、bindDn
、connectionUrl
、およびuseTruststoreSpi
を指定し、action
クエリーパラメーターをtestConnection
に設定します。以下に例を示します。
$ kcadm.sh create testLDAPConnection -s action=testConnection -s bindCredential=secret -s bindDn=uid=admin,ou=system -s connectionUrl=ldap://localhost:10389 -s useTruststoreSpi=ldapsOnly
LDAP ユーザーのストレージ認証のテスト
-
testLDAPConnection
エンドポイントでget
コマンドを実行します。 クエリーパラメーター
bindCredential
、bindDn
、connectionUrl
、およびuseTruststoreSpi
を指定し、action
クエリーパラメーターをtestAuthentication
に設定します。以下に例を示します。
$ kcadm.sh create testLDAPConnection -s action=testAuthentication -s bindCredential=secret -s bindDn=uid=admin,ou=system -s connectionUrl=ldap://localhost:10389 -s useTruststoreSpi=ldapsOnly
20.13. マッパーの追加
ハードコーディングされたロールの LDAP マッパーの追加
-
components
エンドポイントでcreate
コマンドを実行します。 -
providerType
属性をorg.keycloak.storage.ldap.mappers.LDAPStorageMapper
に設定します。 -
parentId
属性を LDAP プロバイダーインスタンスの ID に設定します。 providerId
属性をhardcoded-ldap-role-mapper
に設定します。role
設定パラメーターの値を指定するようにしてください。以下に例を示します。
$ kcadm.sh create components -r demorealm -s name=hardcoded-ldap-role-mapper -s providerId=hardcoded-ldap-role-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea -s 'config.role=["realm-management.create-client"]'
MS Active Directory マッパーの追加
-
components
エンドポイントでcreate
コマンドを実行します。 -
providerType
属性をorg.keycloak.storage.ldap.mappers.LDAPStorageMapper
に設定します。 -
parentId
属性を LDAP プロバイダーインスタンスの ID に設定します。 providerId
属性をmsad-user-account-control-mapper
に設定します。以下に例を示します。
$ kcadm.sh create components -r demorealm -s name=msad-user-account-control-mapper -s providerId=msad-user-account-control-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea
ユーザー属性 LDAP マッパーの追加
-
components
エンドポイントでcreate
コマンドを実行します。 -
providerType
属性をorg.keycloak.storage.ldap.mappers.LDAPStorageMapper
に設定します。 -
parentId
属性を LDAP プロバイダーインスタンスの ID に設定します。 providerId
属性をuser-attribute-ldap-mapper
に設定します。以下に例を示します。
$ kcadm.sh create components -r demorealm -s name=user-attribute-ldap-mapper -s providerId=user-attribute-ldap-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea -s 'config."user.model.attribute"=["email"]' -s 'config."ldap.attribute"=["mail"]' -s 'config."read.only"=["false"]' -s 'config."always.read.value.from.ldap"=["false"]' -s 'config."is.mandatory.in.ldap"=["false"]'
グループの LDAP マッパーの追加
-
components
エンドポイントでcreate
コマンドを実行します。 -
providerType
属性をorg.keycloak.storage.ldap.mappers.LDAPStorageMapper
に設定します。 -
parentId
属性を LDAP プロバイダーインスタンスの ID に設定します。 providerId
属性をgroup-ldap-mapper
に設定します。以下に例を示します。
$ kcadm.sh create components -r demorealm -s name=group-ldap-mapper -s providerId=group-ldap-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea -s 'config."groups.dn"=[]' -s 'config."group.name.ldap.attribute"=["cn"]' -s 'config."group.object.classes"=["groupOfNames"]' -s 'config."preserve.group.inheritance"=["true"]' -s 'config."membership.ldap.attribute"=["member"]' -s 'config."membership.attribute.type"=["DN"]' -s 'config."groups.ldap.filter"=[]' -s 'config.mode=["LDAP_ONLY"]' -s 'config."user.roles.retrieve.strategy"=["LOAD_GROUPS_BY_MEMBER_ATTRIBUTE"]' -s 'config."mapped.group.attributes"=["admins-group"]' -s 'config."drop.non.existing.groups.during.sync"=["false"]' -s 'config.roles=["admins"]' -s 'config.groups=["admins-group"]' -s 'config.group=[]' -s 'config.preserve=["true"]' -s 'config.membership=["member"]'
フルネームの LDAP マッパーの追加
-
components
エンドポイントでcreate
コマンドを実行します。 -
providerType
属性をorg.keycloak.storage.ldap.mappers.LDAPStorageMapper
に設定します。 -
parentId
属性を LDAP プロバイダーインスタンスの ID に設定します。 providerId
属性をfull-name-ldap-mapper
に設定します。以下に例を示します。
$ kcadm.sh create components -r demorealm -s name=full-name-ldap-mapper -s providerId=full-name-ldap-mapper -s providerType=org.keycloak.storage.ldap.mappers.LDAPStorageMapper -s parentId=b7c63d02-b62a-4fc1-977c-947d6a09e1ea -s 'config."ldap.full.name.attribute"=["cn"]' -s 'config."read.only"=["false"]' -s 'config."write.only"=["true"]'
20.14. 認証操作
パスワードポリシーの設定
-
レルムの
passwordPolicy
属性を、特定のポリシープロバイダー ID と任意の設定が含まれる列挙式に設定します。 以下の例を使用して、パスワードポリシーをデフォルト値に設定します。デフォルト値には以下が含まれます。
- 27,500 ハッシュの反復
- 少なくとも 1 つの特殊文字
- 少なくとも 1 つの大文字の文字
- 最低でも 1 桁の文字
-
ユーザーの
username
と等しくない 8 文字以上であること
$ kcadm.sh update realms/demorealm -s 'passwordPolicy="hashIterations and specialChars and upperCase and digits and notUsername and length"'
- デフォルト値と異なる値を使用する場合は、括弧で設定を渡します。
以下の例を使用して、パスワードポリシーを以下のように設定します。
- 25,000 ハッシュの反復
- 少なくとも 2 つの特殊文字
- 少なくとも 2 つの大文字
- 少なくとも 2 つの小文字
- 少なくとも 2 桁
- 最低 9 文字の長さであること
-
ユーザーの
username
と等しくない 少なくとも 4 つの変更の場合、繰り返すことはありません。
$ kcadm.sh update realms/demorealm -s 'passwordPolicy="hashIterations(25000) and specialChars(2) and upperCase(2) and lowerCase(2) and digits(2) and length(9) and notUsername and passwordHistory(4)"'
現在のパスワードポリシーの取得
現在のレルム設定を取得し、passwordPolicy
属性以外のものをすべてフィルターします。
以下の例を使用して、demorealm
の passwordPolicy
を表示します。
$ kcadm.sh get realms/demorealm --fields passwordPolicy
認証フローの一覧表示
authentication/flows
エンドポイントで get
コマンドを実行します。
以下に例を示します。
$ kcadm.sh get authentication/flows -r demorealm
特定の認証フローの取得
authentication/flows/FLOW_ID
エンドポイントで get
コマンドを実行します。
以下に例を示します。
$ kcadm.sh get authentication/flows/febfd772-e1a1-42fb-b8ae-00c0566fafb8 -r demorealm
フローの実行の一覧表示
authentication/flows/FLOW_ALIAS/executions
エンドポイントで get
コマンドを実行します。
以下に例を示します。
$ kcadm.sh get authentication/flows/Copy%20of%20browser/executions -r demorealm
実行への設定の追加
- フローの実行を取得し、その ID を書き留めておきます。
-
authentication/executions/{executionId}/config
エンドポイントでcreate
コマンドを実行します。
以下に例を示します。
$ kcadm create "authentication/executions/a3147129-c402-4760-86d9-3f2345e401c7/config" -r examplerealm -b '{"config":{"x509-cert-auth.mapping-source-selection":"Match SubjectDN using regular expression","x509-cert-auth.regular-expression":"(.*?)(?:$)","x509-cert-auth.mapper-selection":"Custom Attribute Mapper","x509-cert-auth.mapper-selection.user-attribute-name":"usercertificate","x509-cert-auth.crl-checking-enabled":"","x509-cert-auth.crldp-checking-enabled":false,"x509-cert-auth.crl-relative-path":"crl.pem","x509-cert-auth.ocsp-checking-enabled":"","x509-cert-auth.ocsp-responder-uri":"","x509-cert-auth.keyusage":"","x509-cert-auth.extendedkeyusage":"","x509-cert-auth.confirmation-page-disallowed":""},"alias":"my_otp_config"}'
実行設定の取得
-
フローの実行を取得し、設定 ID が含まれる
authenticationConfig
属性を取得します。 -
authentication/config/ID
エンドポイントでget
コマンドを実行します。
以下に例を示します。
$ kcadm get "authentication/config/dd91611a-d25c-421a-87e2-227c18421833" -r examplerealm
実行設定の更新
-
フローの実行を取得し、設定 ID が含まれる
authenticationConfig
属性を取得します。 -
authentication/config/ID
エンドポイントでupdate
コマンドを実行します。
以下に例を示します。
$ kcadm update "authentication/config/dd91611a-d25c-421a-87e2-227c18421833" -r examplerealm -b '{"id":"dd91611a-d25c-421a-87e2-227c18421833","alias":"my_otp_config","config":{"x509-cert-auth.extendedkeyusage":"","x509-cert-auth.mapper-selection.user-attribute-name":"usercertificate","x509-cert-auth.ocsp-responder-uri":"","x509-cert-auth.regular-expression":"(.*?)(?:$)","x509-cert-auth.crl-checking-enabled":"true","x509-cert-auth.confirmation-page-disallowed":"","x509-cert-auth.keyusage":"","x509-cert-auth.mapper-selection":"Custom Attribute Mapper","x509-cert-auth.crl-relative-path":"crl.pem","x509-cert-auth.crldp-checking-enabled":"false","x509-cert-auth.mapping-source-selection":"Match SubjectDN using regular expression","x509-cert-auth.ocsp-checking-enabled":""}}'
実行設定の削除
-
フローの実行を取得し、設定 ID が含まれる
authenticationConfig
属性を取得します。 -
authentication/config/ID
エンドポイントでdelete
コマンドを実行します。
以下に例を示します。
$ kcadm delete "authentication/config/dd91611a-d25c-421a-87e2-227c18421833" -r examplerealm