2.8.6. セキュリティードメインの設定

セキュリティードメインは、ドメインコントローラーまたはスタンドアロンサーバーで一元的に設定されます。セキュリティードメインが使用される場合、セキュリティーを別々に設定する代わりに、アプリケーションがセキュリティードメインを使用するよう設定することができます。これにより、ユーザーと管理者は 宣言的セキュリティー を利用することができます。

このような設定構造を有効に活用できる一般的な例が、アプリケーションをテスト環境と本番環境の間で移動する処理です。アプリケーションのセキュリティーが個別に設定されている場合、テスト環境から本番環境など、アプリケーションが新しい環境に移されるたびにアプリケーションを更新する必要がある可能性があります。代わりにアプリケーションがセキュリティードメインを使用すると、各環境の JBoss EAP インスタンスのセキュリティードメインは現在の環境に対して適切に設定されます。 アプリケーションはコンテナーに依存し、セキュリティードメインを使用して適切なセキュリティー設定を提供できます。

2.8.6.1. ログインモジュール

JBoss EAP には、セキュリティードメイン内で設定されるほとんどのユーザー管理ロールに適する、バンドルされたログインモジュールが複数含まれています。security サブシステムは、リレーショナルデータベース、LDAP サーバー、またはフラットファイルからユーザー情報を読み取りできるコアログインモジュールを複数提供します。JBoss EAP はこれらのコアログインモジュールの他に、カスタマイズの必要性に対応する、ユーザー情報や機能を提供するログインモジュールも提供します。

一般的に使用されるログインモジュールの概要

Ldap ログインモジュール
Ldap ログインモジュールは、LDAP サーバーに対して認証を行うログインモジュール実装です。security サブシステムは bindDN を接続情報として使用し、LDAP サーバーに接続します。この bindDN は、JNDI (Java Naming and Directory Interface) 初期コンテキストを使用した場合にユーザーおよびロールの baseCtxDN および rolesCtxDN ツリーを検索する権限があります。ユーザーが認証を試みると、LDAP ログインモジュールは LDAP サーバーへ接続し、ユーザーのクレデンシャルを LDAP サーバーに渡します。認証に成功すると、JBoss EAP 内のそのユーザーに InitialLDAPContext が作成され、ユーザーのロールが入力されます。
LdapExtended ログインモジュール
The LdapExtended ログインモジュールは、ユーザーと認証でバインドする関連ロールを検索します。ロールは再帰的にクエリーを行い、DN に従って階層的なロール構造を移動します。ログインモジュールオプションには、JNDI (Java Naming and Directory Interface) プロバイダーがサポートする指定の LDAP によってオプションがサポートされるかどうかが含まれます。
UsersRoles ログインモジュール
UsersRoles ログインモジュールは、Java プロパティーファイルからロードされる複数のユーザーおよびユーザーロールをサポートする簡単なログインモジュールです。このログインモジュールの主な目的は、アプリケーションとともにデプロイされたプロパティーファイルを使用して複数のユーザーおよびロールのセキュリティー設定を簡単にテストすることです。
Database ログインモジュール
Database ログインモジュールは、認証およびロールマッピングをサポートする JDBC ログインモジュールです。このログインモジュールは、ユーザー名、パスワード、およびロール情報がリレーショナルデータベースに格納される場合に使用されます。このログインモジュールは、想定される形式のプリンシパルおよびロールが含まれる論理テーブルへの参照を提供して動作します。
Certificate ログインモジュール
Certificate ログインモジュールは、X509 証明書を基にユーザーを認証します。このログインモジュールの典型的なユースケースが、web 層の CLIENT-CERT 認証です。証明書ログインモジュールは認証のみを実行するため、セキュアな web または EJB コンポーネントへのアクセスを完全に定義するには、承認ロールを取得できる他のログインモジュールと組み合わせる必要があります。このログインモジュールの 2 つのサブクラスである CertRolesLoginModule および DatabaseCertLoginModule は動作を拡張し、プロパティーファイルまたはデータベースから承認ロールを取得します。
Identity ログインモジュール
Identity ログインモジュールは、ハードコードされたユーザー名をモジュールに対して認証されたサブジェクトに関連付ける簡単なログインモジュールです。このモジュールは、プリンシパルのオプションによって指定された名前を使用して SimplePrincipal インスタンスを作成します。このログインモジュールは、固定のアイデンティティーをサービスに提供する必要がある場合に便利です。また、指定のプリンシパルに関連するセキュリティーや関連するロールをテストするために、開発環境でも使用できます。
RunAs ログインモジュール
RunAS ログインモジュールは、認証のログインフェーズの間に run-as ロールをスタックにプッシュするヘルパーモジュールです。ログインフェーズ後、コミットまたはアボートフェーズで run-as ロールをスタックからポップします。このログインモジュールの目的は、セキュアな EJB にアクセスするログインモジュールなど、セキュアなリソースにアクセスして認証を実行する必要のあるその他のログインモジュールにロールを提供することです。RunAs ログインモジュールは、run-as ロールの構築が必要なログインモジュールよりも先に設定する必要があります。
Client ログインモジュール
Client ログインモジュールは、呼び出し元のアイデンティティーおよびクレデンシャルの確立時に JBoss クライアントによって使用されるログインモジュールの実装です。新しい SecurityContext を作成してプリンシパルとクレデンシャルに割り当て、SecurityContextThreadLocal セキュリティーコンテキストに設定します。Client ログインモジュールは、クライアントが現在のスレッドの呼び出し元を確立するために唯一サポートされるログインモジュールです。JBoss EAP security サブシステムを透過的に使用するようにセキュリティー環境が設定されていない JBoss Jakarta Enterprise Beans クライアントとして機能するスタンドアロンクライアントアプリケーションとサーバー環境の両方で、Client ログインモジュールを使用する必要があります。
警告

このログインモジュールは認証を実行しません。サーバー上の後続の認証のために、提供されたログイン情報をサーバー Jakarta Enterprise Beans 呼び出しレイヤーにコピーすることもほとんどありません。JBoss EAP 内では、JVM 内の呼び出しに対してユーザーのアイデンティティーを切り替える場合のみサポートされます。リモートクライアントがアイデンティティーを確立する目的ではサポートされません

SPNEGO ログインモジュール
SPNEGO ログインモジュールは、KDC で呼び出し元のアイデンティティーとクレデンシャルを確立するログインモジュールの実装です。モジュールは JBoss Negotiation プロジェクトの一部で、SPNEGO を実装します。この認証を AdvancedLdap ログインモジュールとチェーンされた設定で使用すると、LDAP サーバーと連携できます。また、このログインモジュールを使用するには、web アプリケーションがアプリケーション内で NegotiationAuthenticator を有効にする必要があります。
RoleMapping ログインモジュール
RoleMapping ログインモジュールは、1 つ以上の宣言的ロールへの認証プロセスの最終結果となるロールのマッピングをサポートします。たとえば、ユーザー John のロールが ldapAdmintestAdmin で、web.xml または ejb-jar.xml ファイルで定義されたアクセスの宣言的ロールは admin であると認証プロセスによって判断された場合、このログインモジュールは ldapAdmin および testAdmin ロールを John にマップします。RoleMapping ログインモジュールは、以前マップされたロールのマッピングを変更するため、ログインモジュール設定でオプションのモジュールとして定義する必要があります。
Remoting ログインモジュール
Remoting ログインモジュールは現在認証中のリクエストがリモーティング接続上で受信されたかどうかをチェックします。リクエストがリモーティングインターフェイスを使用して受信された場合、リクエストは認証プロセス中に作成されたアイデンティティーに関連付けられます。
RealmDirect ログインモジュール
RealmDirect ログインモジュールは、認証および承認の決定に既存のセキュリティーレルムを使用できるようにします。このモジュールを設定すると、認証の決定とユーザーロールのマッピングに、参照したレルムを使用してアイデンティティー情報を検索します。たとえば、JBoss EAP に同梱される事前設定された other セキュリティードメインには RealmDirect ログインモジュールがあります。このモジュールに参照されるレルムがない場合、デフォルトで ApplicationRealm セキュリティーレルムが使用されます。
カスタムモジュール
JBoss EAP セキュリティーフレームワークとバンドルされるログインモジュールがセキュリティー環境の要件に対応できない場合、カスタムログインモジュール実装を作成できます。AuthenticationManager は、Subject プリンシパルの特定の使用パターンを必要とします。AuthenticationManager と動作するログインモジュールを作成するには、Jakarta Authentication Subject クラスの情報ストレージ機能と、これらの機能の想定される使用方法を完全に理解する必要があります。

UnauthenticatedIdentity ログインモジュールオプションも一般的に使用されます。一部のケースでは、認証された形式でリクエストが受信されないことがあります。UnauthenticatedIdentity は、guest などの特定のアイデンティティーを、関連する認証情報がない状態で作成されたリクエストに割り当てます。これを使用すると、保護されていないサーブレットは特定ロールを必要としない EJB でメソッドを呼び出すことができます。このようなプリンシパルにはロールが関連付けられておらず、unchecked 権限制約に関連付けられている保護されていない Jakarta Enterprise Beans メソッドにのみアクセスできます。