Realmコンポーネント

目次

はじめに

Realm要素は、ユーザー名、パスワード、およびそれらのユーザーに割り当てられたロール(Unixのグループに類似)の「データベース」を表します。Realmのさまざまな実装により、Catalinaは、このような認証情報が既に作成および保守されている環境に統合され、その情報を利用してサーブレット仕様に記載されているコンテナマネージドセキュリティを実装できます。

Catalinaコンテナ(EngineHost、またはContext)には、Realm要素を1つだけ含めることができます(ただし、Realmでサポートされている場合、この1つのRealmには複数のネストされたRealmが含まれる場合があります)。さらに、EngineまたはHostに関連付けられたRealmは、下位レベルのコンテナが独自のRealmを明示的に定義しない限り、下位レベルのコンテナによって自動的に継承されます。EngineにRealmが設定されていない場合、Null RealmのインスタンスがEngineに自動的に設定されます。

Webアプリケーションのコンテナマネージドセキュリティ、および標準のRealmコンポーネント実装の設定と使用の詳細については、コンテナマネージドセキュリティガイドを参照してください。

以下の説明では、変数名$CATALINA_BASEを使用して、ほとんどの相対パスが解決されるベースディレクトリを参照します。CATALINA_BASEディレクトリを設定してTomcatを複数のインスタンス用に設定していない場合、$CATALINA_BASEは、Tomcatをインストールしたディレクトリである$CATALINA_HOMEの値に設定されます。

属性

共通属性

Realmのすべての実装は、次の属性をサポートしています

属性説明
className

使用する実装のJavaクラス名。このクラスは、org.apache.catalina.Realmインターフェースを実装する必要があります。

ほとんどのCatalinaコンポーネントとは異なり、利用可能な標準のRealm実装がいくつかあります。そのため、className属性を使用して、使用する実装を選択する必要があります。

データソースデータベースRealm - org.apache.catalina.realm.DataSourceRealm

データソースデータベースRealmは、TomcatをJNDIという名前のJDBCデータソースを介してアクセスされるリレーショナルデータベースに接続して、ユーザー名、パスワード、およびそれらに関連付けられたロールの検索を実行します。ルックアップは必要なたびに実行されるため、データベースへの変更は、新しいログインの認証に使用される情報にすぐに反映されます。

JDBC Realmは単一のデータベース接続を使用します。そのため、レルムベースの認証を同期する必要があります。つまり、一度に1つの認証しか実行できません。これは、レルムベースの認証の量が多いアプリケーションのボトルネックになる可能性があります。

データソースデータベースレルムは、同時レルムベース認証をサポートし、基盤となるJDBCデータソースがデータベース接続プーリングなどの最適化を処理できるようにします。

豊富な追加属性セットにより、JNDI JDBCデータソースの名前、および必要な情報を取得するために使用されるテーブル名と列名を構成できます

属性説明
allRolesMode

この属性は、web.xmlで認証制約を処理するときに、特別なロール名*がどのように処理されるかを制御します。デフォルトでは、仕様に準拠した値であるstrictが使用されます。これは、ユーザーがweb.xmlで定義されたロールのいずれかに割り当てられている必要があることを意味します。代替値は、ユーザーが認証されている必要があるが、割り当てられたロールのチェックは行われないことを意味するauthOnlyと、ユーザーが認証されている必要があり、ロールが定義されていない限り、割り当てられたロールのチェックは行われないことを意味するstrictAuthOnlyです。 web.xmlの場合、ユーザーはこれらのロールの少なくとも1つに割り当てられている必要があります。

この属性の値がauthOnlyまたはstrictAuthOnlyの場合、roleNameCol属性とuserRoleTable属性はオプションになります。これらの2つの属性が省略された場合、ユーザーのロールはこのRealmによってロードされません。

dataSourceName

このRealmのJNDI JDBCデータソースの名前。

localDataSource

レルムがContext要素内にネストされている場合、レルムはグローバルデータソースではなく、Contextに定義されたデータソースを使用できます。指定しない場合、デフォルトはfalseです。グローバルデータソースを使用します。

roleNameCol

対応するユーザーに割り当てられたロール名を含む「ユーザーロール」テーブルの列の名前。

この属性は、ほとんどの設定で**必須**です。省略できるまれなケースについては、**allRolesMode**属性を参照してください。

transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

stripRealmForGss

GSS-APIを介して認証されたユーザーを処理する場合、この属性は、ユーザー名の末尾から「@…」が削除されるかどうかを制御します.指定しない場合、デフォルトはtrueです.

userCredCol

ユーザーの資格情報(つまり、パスワード)を含む「ユーザー」テーブルの列の名前。CredentialHandlerが指定されている場合、このコンポーネントは、パスワードが指定されたアルゴリズムでエンコードされていると想定します。それ以外の場合、それらはクリアテキストであると想定されます。

userNameCol

ユーザーのユーザー名を含む「ユーザー」テーブルと「ユーザーロール」テーブルの列の名前。

userRoleTable

userNameCol属性とroleNameCol属性で名前が付けられた列を含む必要がある「ユーザーロール」テーブルの名前。

この属性は、ほとんどの設定で**必須**です。省略できるまれなケースについては、**allRolesMode**属性を参照してください。

userTable

userNameCol属性とuserCredCol属性で名前が付けられた列を含む必要がある「ユーザー」テーブルの名前。

X509UsernameRetrieverClassName

X509クライアント証明書を使用する場合、これは証明書からユーザー名を取得するために使用されるクラス名を指定します.クラスは、org.apache.catalina.realm.X509UsernameRetrieverインターフェースを実装する必要があります。デフォルトでは、証明書のSubjectDNをユーザー名として使用します.

データソースデータベースレルムコンポーネントを使用してコンテナマネージドセキュリティを設定する方法の詳細については、データソースレルムのハウツーを参照してください。

JNDIディレクトリRealm - org.apache.catalina.realm.JNDIRealm

**JNDIディレクトリレルム**は、Tomcatを、適切なJNDIドライバを介してアクセスされるLDAPディレクトリに接続します。このディレクトリには、ユーザー名、パスワード、およびそれらに関連付けられたロールが格納されます。ディレクトリへの変更は、新しいログインの認証に使用される情報にすぐに反映されます.

ディレクトリレルムは、認証にLDAPを使用するためのさまざまなアプローチをサポートしています

  • レルムは、パターンを使用してユーザーのディレクトリエントリの識別名(DN)を決定するか、ディレクトリを検索してそのエントリを見つけることができます.
  • レルムは、ユーザーのエントリのDNとユーザーが提示したパスワードを使用してディレクトリにバインドするか、ユーザーのエントリからパスワードを取得してローカルで比較を実行することにより、ユーザーを認証できます.
  • ロールは、ディレクトリ検索で見つかった明示的なエントリ(たとえば、ユーザーがメンバーであるグループエントリ)として、ユーザーのエントリの属性の値として、またはその両方としてディレクトリに表すことができます.

豊富な追加属性セットにより、必要な動作、基盤となるディレクトリへの接続、およびディレクトリから情報を取得するために使用される要素名と属性名を構成できます

属性説明
adCompat

Microsoft Active Directoryは、多くの場合、参照を返します。NamingEnumerationsを反復処理すると、PartialResultExceptionsが発生します。これらの例外を無視する場合は、この属性を「true」に設定します。残念ながら、例外が実際にAD参照から来ているかどうかを検出する安定した方法はありません。デフォルト値は「false」です。

allRolesMode

この属性は、web.xmlで認証制約を処理するときに、特別なロール名*がどのように処理されるかを制御します。デフォルトでは、仕様に準拠した値であるstrictが使用されます。これは、ユーザーがweb.xmlで定義されたロールのいずれかに割り当てられている必要があることを意味します。代替値は、ユーザーが認証されている必要があるが、割り当てられたロールのチェックは行われないことを意味するauthOnlyと、ユーザーが認証されている必要があり、ロールが定義されていない限り、割り当てられたロールのチェックは行われないことを意味するstrictAuthOnlyです。 web.xmlの場合、ユーザーはこれらのロールの少なくとも1つに割り当てられている必要があります。

alternateURL

connectionURLのプロバイダーにソケット接続を確立できない場合、alternateURLの使用が試みられます。

authentication

使用する認証のタイプを指定する文字列。「none」、「simple」、「strong」、またはプロバイダー固有の定義を使用できます。値が指定されていない場合、プロバイダーのデフォルトが使用されます。

cipherSuites

StartTLSを使用して安全な接続を開こうとするときに許可される暗号スイートを指定します。許可される暗号スイートは、コンマ区切りのリストで指定されます。デフォルトでは、JVMの暗号スイートが使用されます。

commonRole

LDAPから取得したロールに加えて、正常に認証された各ユーザーに割り当てられたロール名。指定しない場合、LDAPを介して取得されたロールのみが使用されます。

connectionName

LDAP検索操作のためにディレクトリへの接続を確立するときに使用するディレクトリユーザー名。指定しない場合、匿名接続が確立されます。これは、userPasswordプロパティを指定しない限り、多くの場合十分です。

connectionPassword

LDAP検索操作のためにディレクトリへの接続を確立するときに使用するディレクトリパスワード。指定しない場合、匿名接続が確立されます。これは、userPasswordプロパティを指定しない限り、多くの場合十分です。

connectionPoolSize

JNDIレルムは、単一の接続でブロックされないように、ディレクトリサーバーへの接続プールを使用できます。この属性値は、プールの最大サイズです。指定しない場合、1が使用されます。これは、単一の接続が使用されることを意味します。

connectionTimeout

LDAPディレクトリへの接続を確立するときに使用するタイムアウト(ミリ秒単位)。指定しない場合、5000(5秒)の値が使用されます。

connectionURL

ディレクトリへの接続を確立するときにJNDIドライバに渡される接続URL。

contextFactory

JNDI InitialContextを取得するために使用されるファクトリクラスの完全修飾Javaクラス名。デフォルトでは、標準のJNDI LDAPプロバイダーが利用されると想定されます。

derefAliases

検索操作中にエイリアスを逆参照する方法を指定する文字列。許可される値は、「always」、「never」、「finding」、および「searching」です。指定しない場合、「always」が使用されます。

forceDnHexEscape

trueに設定すると、識別名の文字列表現でのエスケープが強制され、\nn形式が使用されます。これにより、\nn形式が使用されている場合にオプションのエスケープに対してより寛容に見えるActive Directoryを使用するレルムの問題を回避できます。指定しない場合、デフォルトのfalseが使用されます。

hostnameVerifierClassName

ldapサーバーへの接続を保護するためにStartTLSを使用する場合のホスト名検証に使用するクラスの名前。デフォルトコンストラクタを使用して、verifierクラスのインスタンスが構築されます。デフォルトでは、ldapサーバーのピア証明書に従って有効なホスト名のみを受け入れます。

protocol

TLSプロトコルの指定文字列です。指定されていない場合は、Javaランタイムのデフォルトが使用されます。

readTimeout

ディレクトリへの接続から読み取ろうとするときに使用するタイムアウト(ミリ秒単位)です。指定しない場合、デフォルトの5000(5秒)が使用されます。

referrals

JNDIリファラルをどのように処理するかを指定します。許可される値は、「ignore」、「follow」、または「throw」です(詳細については、javax.naming.Context.REFERRALを参照してください)。Microsoft Active Directoryは、多くの場合、リファラルを返します。リファラルに従う必要がある場合は、referralsを「follow」に設定します。注意:DNSがADの一部でない場合、LDAPクライアントライブラリは、DNSでドメイン名を解決して別のLDAPサーバーを見つけようとする可能性があります。

roleBase

ロール検索を実行するためのベースディレクトリエントリです。指定しない場合、ディレクトリコンテキストの最上位要素が使用されます。指定した場合、ユーザーの識別名(javax.naming.Name.get()によって返される)の名前部分に対応するパターン置換「{0}」..「{n}」をオプションで含めることができます。

roleName

ロール検索で見つかったディレクトリエントリにロール名を含む属性の名前です。さらに、userRoleNameプロパティを使用して、ユーザーのエントリに、追加のロール名を含む属性の名前を指定できます。

roleNameが指定されていない場合、ロール検索は行われず、ロールはユーザーのエントリからのみ取得されます。

roleNested

ロールをネストする場合は、trueに設定します。ロール検索が実行され、このプロパティの値がtrueの場合、検索は再帰的に繰り返され、ユーザーに直接または間接的に属するすべてのロールが検出されます。指定しない場合、デフォルト値のfalseが使用されます。

roleSearch

ロール検索を実行するために使用されるLDAPフィルター式です。

{0}を使用して、認証済みユーザーの識別名(DN)を、{1}を使用してユーザー名を、{2}を使用してユーザーのディレクトリエントリからの属性の値を置き換えます。{2}の値を提供する属性の名前は、userRoleAttributeプロパティによって構成されます。

roleNestedプロパティがtrueの場合、このフィルター式は、このユーザーに間接的に属する他のロールを再帰的に検索するためにも使用されます。新しく見つかったロールに一致するロールを見つけるために、次の値が使用されます。{0}は新しく見つかったロールの識別名に置き換えられ、{1}{2}はどちらもロールの名前に置き換えられます(roleNameプロパティを参照)。userRoleAttributeプロパティはこの検索には適用されません。

このプロパティが指定されていない場合、ロール検索は行われず、ロールはuserRoleNameプロパティで指定されたユーザーのエントリ内の属性からのみ取得されます。

roleSearchAsUser

ユーザーロールを検索するときに、現在認証されているユーザーとして検索を実行する必要がありますか?falseの場合、connectionNameconnectionPasswordが指定されている場合は使用され、そうでない場合は匿名が使用されます。指定しない場合、デフォルト値のfalseが使用されます。委任された資格情報を使用してディレクトリにアクセスする場合、この属性は常に無視され、検索は委任された資格情報を使用して実行されることに注意してください。

roleSubtree

ユーザーに関連付けられたロールエントリについて、roleBaseプロパティで指定された要素のサブツリー全体を検索する場合は、trueに設定します。デフォルト値のfalseは、トップレベルのみが検索されるようにします。

sizeLimit

userSearch属性を使用する場合に返されるレコードの最大数を指定します。指定しない場合、デフォルトの0が使用され、制限がないことを示します。

spnegoDelegationQop

JNDI RealmがSPNEGO認証子と共に使用され、useDelegatedCredentialtrueの場合、この属性は認証後にLDAPサーバーへの接続に使用するQOP(Quality of Protection)を制御します。この値は、LDAP接続のjavax.security.sasl.qop環境プロパティを設定するために使用されます。この属性は、auth-confauth-int、およびauthから選択された値のコンマ区切りリストである必要があります。詳細については、Javaドキュメントを参照してください。

デフォルト値はauth-confです。

sslProtocol

StartTLSで接続する場合に使用するSSLプロトコルを指定します。デフォルトでは、JREに決定させます。さらに制御が必要な場合は、使用するSSLSocketFactoryを指定できます。

sslSocketFactory

StartTLSを使用してLDAPサーバーに接続するときに使用するSSLSocketFactoryを指定します。クラスのインスタンスは、デフォルトコンストラクターを使用して構築されます。クラス名が指定されていない場合、デフォルトのJRE SSLSocketFactoryが使用されます。

stripRealmForGss

GSS-APIを介して認証されたユーザーを処理する場合、この属性は、ユーザー名の末尾から「@…」が削除されるかどうかを制御します.指定しない場合、デフォルトはtrueです.

timeLimit

userSearch属性を使用する場合に、レコードが返されるのを待つ時間(ミリ秒単位)を指定します。指定しない場合、デフォルトの0が使用され、制限がないことを示します。

transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

useContextClassLoader

JNDIプロバイダーの接続を開くときに、コンテキストクラスローダーを使用するようにJNDIRealmに指示します。デフォルト値はtrueです。コンテナのクラスローダーを使用してクラスをロードするには、falseを指定します。

useDelegatedCredential

JNDIRealmがSPNEGO認証子と共に使用される場合、ユーザーの委任された資格情報が使用できる場合があります。そのような資格情報が存在する場合、この属性は、ディレクトリへの接続にそれらを使用するかどうかを制御します。指定しない場合、デフォルト値のtrueが使用されます。

userBase

userSearch式を使用して実行されるユーザー検索のベース要素。userPattern式を使用している場合は使用されません。

userPassword

ユーザーのエントリでユーザーのパスワードを含む属性の名前。この値を指定すると、JNDIRealmはconnectionNameおよびconnectionPasswordプロパティで指定された値を使用してディレクトリにバインドし、対応する属性を取得して、認証されているユーザーによって指定された値と比較します。この値を指定**しない**場合、JNDIRealmは、ユーザーのエントリのDNとユーザーによって提示されたパスワードを使用して、ディレクトリへの単純なバインドを試みます。バインドが成功すると、認証されたユーザーとして解釈されます。

userPattern

ユーザーのディレクトリエントリの識別名(DN)のパターン。{0}は実際のユーザー名を挿入する場所を示します。識別名にユーザー名が含まれており、それ以外の場合はすべてのユーザーで同じである場合、userSearchuserSubtree、およびuserBaseの代わりにこのプロパティを使用できます。委任された資格情報を使用してディレクトリにアクセスする場合、この属性は常に無視され、代わりにuserSearchuserSubtree、およびuserBaseが常に使用されることに注意してください。

userRoleName

ユーザーのディレクトリエントリ内の属性の名前。このユーザーに割り当てられたロールの名前の値を0個以上含みます。さらに、roleNameプロパティを使用して、ディレクトリの検索で見つかった個々のロールエントリから取得する属性の名前を指定できます。userRoleNameが指定されていない場合、ユーザーのすべてのロールはロール検索から派生します。

userRoleAttribute

ロールを検索するときに使用する値を含む、ユーザーのディレクトリエントリ内の属性の名前。これは、ロールメンバーUidがユーザーのuidまたはuidNumberになる可能性のあるRFC 2307で特に役立ちます。この値は、ロール検索フィルター式で{2}としてマークされます。この値は、ネストされたロール検索では使用**できません**。

userSearch

ユーザーのディレクトリエントリを検索するときに使用するLDAPフィルター式。{0}は実際のユーザー名を挿入する場所を示します。ディレクトリでユーザーのエントリを検索するには、userPatternの代わりにこのプロパティ(userBaseおよびuserSubtreeプロパティと共に)を使用します。

userSearchAsUser

ユーザーのエントリを検索するときに、現在認証されているユーザーとして検索を実行する必要がありますか?falseの場合、connectionNameconnectionPasswordが指定されている場合は使用され、そうでない場合は匿名が使用されます。指定しない場合、デフォルト値の`false`が使用されます。委任された資格情報を使用してディレクトリにアクセスする場合、この属性は常に無視され、検索は委任された資格情報を使用して実行されることに注意してください。

userSubtree

ユーザーのエントリについて、userBaseプロパティで指定された要素のサブツリー全体を検索する場合は、trueに設定します。デフォルト値のfalseは、トップレベルのみが検索されるようにします。userPattern式を使用している場合は使用されません。

useStartTls

ldapサーバーへの接続を保護するためにStartTLSを使用する場合は、trueに設定します。デフォルト値はfalseです。

X509UsernameRetrieverClassName

X509クライアント証明書を使用する場合、これは証明書からユーザー名を取得するために使用されるクラス名を指定します.クラスは、org.apache.catalina.realm.X509UsernameRetrieverインターフェースを実装する必要があります。デフォルトでは、証明書のSubjectDNをユーザー名として使用します.

JNDI Directory Realmコンポーネントを使用してコンテナ管理セキュリティを設定する方法の詳細については、コンテナ管理セキュリティガイドを参照してください。

ユーザーデータベースRealm - org.apache.catalina.realm.UserDatabaseRealm

**UserDatabase Realm**は、このTomcatインスタンス用に構成されたグローバルJNDIリソースを介して利用可能になるUserDatabaseリソースに基づくRealm実装です。

UserDatabase Realm実装は、以下の追加属性をサポートしています。

属性説明
allRolesMode

この属性は、web.xmlで認証制約を処理するときに、特別なロール名*がどのように処理されるかを制御します。デフォルトでは、仕様に準拠した値であるstrictが使用されます。これは、ユーザーがweb.xmlで定義されたロールのいずれかに割り当てられている必要があることを意味します。代替値は、ユーザーが認証されている必要があるが、割り当てられたロールのチェックは行われないことを意味するauthOnlyと、ユーザーが認証されている必要があり、ロールが定義されていない限り、割り当てられたロールのチェックは行われないことを意味するstrictAuthOnlyです。 web.xmlの場合、ユーザーはこれらのロールの少なくとも1つに割り当てられている必要があります。

localJndiResource

レルムがContext要素内にネストされている場合、レルムはグローバルUserDatabaseではなく、Context用に定義されたUserDatabaseを使用できます。指定しない場合、デフォルトはfalseです。グローバルUserDatabaseを使用します。

resourceName

このレルムがユーザー、パスワード、およびロール情報に使用するグローバルUserDatabaseリソースの名前。

useStaticPrincipal

これにより、必要に応じて、データベースから切断された静的`Principal`インスタンスを使用できます。これにより、認証済みプリンシパルの動作が他のレルムの動作と同等になります。シリアライゼーションを使用する予定がある場合は、シリアライズ時にプリンシパルが常にこの同等の静的プリンシパルに置き換えられるため、これを`true`に設定することをお勧めします。指定しない場合、デフォルトは`false`です。UserDatabaseに接続されたプリンシパルを使用します。

transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

X509UsernameRetrieverClassName

X509クライアント証明書を使用する場合、これは証明書からユーザー名を取得するために使用されるクラス名を指定します.クラスは、org.apache.catalina.realm.X509UsernameRetrieverインターフェースを実装する必要があります。デフォルトでは、証明書のSubjectDNをユーザー名として使用します.

UserDatabase Realmコンポーネントを使用してコンテナ管理セキュリティを設定する方法の詳細については、コンテナ管理セキュリティガイドを、UserDatabaseリソースの設定方法の詳細については、JNDIリソースの使い方を参照してください。

メモリベースRealm - org.apache.catalina.realm.MemoryRealm

メモリベースレルムは、XML形式からユーザー情報を読み取り、メモリ内のJavaオブジェクトのコレクションとして表現する、シンプルなレルム実装です。この実装は、コンテナ管理セキュリティをすぐに使い始めることだけを目的としており、本番環境での使用は意図されていません。そのため、基になるデータファイルの内容が変更されたときに、メモリ内のユーザーコレクションを更新するメカニズムはありません。

メモリベースレルム実装は、以下の追加属性をサポートしています。

属性説明
allRolesMode

この属性は、web.xmlで認証制約を処理するときに、特別なロール名*がどのように処理されるかを制御します。デフォルトでは、仕様に準拠した値であるstrictが使用されます。これは、ユーザーがweb.xmlで定義されたロールのいずれかに割り当てられている必要があることを意味します。代替値は、ユーザーが認証されている必要があるが、割り当てられたロールのチェックは行われないことを意味するauthOnlyと、ユーザーが認証されている必要があり、ロールが定義されていない限り、割り当てられたロールのチェックは行われないことを意味するstrictAuthOnlyです。 web.xmlの場合、ユーザーはこれらのロールの少なくとも1つに割り当てられている必要があります。

pathname

ユーザー情報を含むXMLファイルのURL、絶対パス、または相対パス($CATALINA_BASEからの相対パス)。必要なXML要素の形式については、以下を参照してください。パス名が指定されていない場合、デフォルト値はconf/tomcat-users.xmlです。

stripRealmForGss

GSS-APIを介して認証されたユーザーを処理する場合、この属性は、ユーザー名の末尾から「@…」が削除されるかどうかを制御します.指定しない場合、デフォルトはtrueです.

transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

X509UsernameRetrieverClassName

X509クライアント証明書を使用する場合、これは証明書からユーザー名を取得するために使用されるクラス名を指定します.クラスは、org.apache.catalina.realm.X509UsernameRetrieverインターフェースを実装する必要があります。デフォルトでは、証明書のSubjectDNをユーザー名として使用します.

pathname属性で参照されるXMLドキュメントは、以下の要件に準拠する必要があります。

  • ルート(外側)要素は<tomcat-users>である必要があります。
  • 各承認済みユーザーは、ルート要素内にネストされた単一のXML要素<user>で表される必要があります。
  • <user>要素には、以下の属性が必要です。
    • username - このユーザーのユーザー名(このファイル内で一意である必要があります)。
      互換性のために、この属性の代替名としてnameを使用することが許可されています。
    • password - このユーザーのパスワード(平文)。
    • roles - このユーザーに割り当てられたロール名のカンマ区切りリスト。

メモリベースレルムコンポーネントを使用してコンテナ管理セキュリティを設定する方法の詳細については、コンテナ管理セキュリティガイドを参照してください。

JAAS Realm - org.apache.catalina.realm.JAASRealm

JAASRealmは、標準J2SE APIの一部として提供されているJava Authentication & Authorization Service(JAAS)フレームワークを通じてユーザーを認証する、Tomcat Realmインターフェースの実装です。

JAASRealmを使用すると、開発者は考えられるほぼすべてのセキュリティレルムをTomcatのCMAと組み合わせることができます。

JAASRealmは、コンテナ管理セキュリティを強化し、実装がコンテナに依存しない「プラグイン可能な」認証メカニズムを促進するためのJCP仕様要求196に基づいた、J2EE v1.4向けのJAASベースのJ2EE認証フレームワークのTomcatのプロトタイプです。

JAASログインモジュールとプリンシパル(javax.security.auth.spi.LoginModuleおよびjavax.security.Principalを参照)に基づいて、独自のセキュリティメカニズムを開発したり、Tomcatによって実装されているCMAと統合するために別のサードパーティメカニズムをラップしたりできます。

JAAS Realm実装は、以下の追加属性をサポートしています。

属性説明
allRolesMode

この属性は、web.xmlで認証制約を処理するときに、特別なロール名*がどのように処理されるかを制御します。デフォルトでは、仕様に準拠した値であるstrictが使用されます。これは、ユーザーがweb.xmlで定義されたロールのいずれかに割り当てられている必要があることを意味します。代替値は、ユーザーが認証されている必要があるが、割り当てられたロールのチェックは行われないことを意味するauthOnlyと、ユーザーが認証されている必要があり、ロールが定義されていない限り、割り当てられたロールのチェックは行われないことを意味するstrictAuthOnlyです。 web.xmlの場合、ユーザーはこれらのロールの少なくとも1つに割り当てられている必要があります。

appName

ログイン構成ファイル(JAAS LoginConfig)で構成されているアプリケーションの名前。

指定されていない場合、appNameは、配置されているコンテナの名前(たとえば、CatalinaまたはROOT)から派生します。レルムがどのコンテナにも配置されていない場合、デフォルトはTomcatです。

userClassNames

ユーザーPrincipal用に作成したクラスの名前のカンマ区切りリスト。

configFile

このレルムで使用するJAAS構成ファイルの名前。 これはClassLoader#getResource(String)を使用して検索されるため、構成をWebアプリケーション内にバンドルすることが可能です。 指定しない場合、デフォルトのJVMグローバルJAAS構成が使用されます。

roleClassNames

ロールPrincipal用に作成したクラスの名前のカンマ区切りリスト。

stripRealmForGss

GSS-APIを介して認証されたユーザーを処理する場合、この属性は、ユーザー名の末尾から「@…」が削除されるかどうかを制御します.指定しない場合、デフォルトはtrueです.

transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

useContextClassLoader

ユーザー指定のLoginModuleクラスと関連するPrincipalクラスのロードに、コンテキストクラスローダーを使用するようにJAASRealmに指示します。 デフォルト値はtrueで、Tomcat 5の動作と後方互換性があります。 コンテナのクラスローダーを使用してクラスをロードするには、falseを指定します。

X509UsernameRetrieverClassName

X509クライアント証明書を使用する場合、これは証明書からユーザー名を取得するために使用されるクラス名を指定します.クラスは、org.apache.catalina.realm.X509UsernameRetrieverインターフェースを実装する必要があります。デフォルトでは、証明書のSubjectDNをユーザー名として使用します.

JAAS Realmコンポーネントを使用してコンテナ管理セキュリティを設定する方法の詳細については、コンテナ管理セキュリティガイドを参照してください。

複合Realm - org.apache.catalina.realm.CombinedRealm

CombinedRealmは、1つ以上のサブレルムを通じてユーザーを認証する、Tomcat Realmインターフェースの実装です。

CombinedRealmを使用すると、開発者は同じタイプまたは異なるタイプの複数のレルムを組み合わせることができます。これは、異なるソースに対して認証を行ったり、1つのレルムに障害が発生した場合のフォールバックを提供したり、複数のレルムを必要とするその他の目的で使用できます。

サブレルムは、CombinedRealmを定義するRealm要素内にRealm要素をネストすることによって定義されます。認証は、リストされている順序で各Realmに対して試行されます。いずれかのレルムに対する認証が成功すれば、ユーザーの認証は成功です。認証されたユーザーとそれに関連付けられたロールは、ユーザーの認証に成功した最初のレルムから取得されます。

CombinedRealmコンポーネントを使用してコンテナ管理セキュリティを設定する方法の詳細については、コンテナ管理セキュリティガイドを参照してください。

CombinedRealm実装は、以下の追加属性をサポートしています。

属性説明
allRolesMode

この属性は、web.xmlで認証制約を処理するときに、特別なロール名*がどのように処理されるかを制御します。デフォルトでは、仕様に準拠した値であるstrictが使用されます。これは、ユーザーがweb.xmlで定義されたロールのいずれかに割り当てられている必要があることを意味します。代替値は、ユーザーが認証されている必要があるが、割り当てられたロールのチェックは行われないことを意味するauthOnlyと、ユーザーが認証されている必要があり、ロールが定義されていない限り、割り当てられたロールのチェックは行われないことを意味するstrictAuthOnlyです。 web.xmlの場合、ユーザーはこれらのロールの少なくとも1つに割り当てられている必要があります。

transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

ロックアウトRealm - org.apache.catalina.realm.LockOutRealm

LockOutRealmは、一定期間内に認証試行の失敗が多すぎる場合にユーザーロックアウトメカニズムを提供するために、ロックアウト機能を提供するようにCombinedRealmを拡張するTomcat Realmインターフェースの実装です。

正しい動作を保証するために、このレルムにはある程度の同期があります。

このレルムは、基になるレルムまたは関連するユーザーストレージメカニズムを変更する必要はありません。これは、存在しないユーザーを含め、すべてのログイン失敗を記録することによって実現されます。無効なユーザーで意図的にリクエストを行うことによるDOS(およびこのキャッシュの増加)を防ぐために、認証に失敗したユーザーのリストのサイズは制限されています。

サブレルムは、LockOutRealmを定義するRealm要素内にRealm要素をネストすることによって定義されます。認証は、リストされている順序で各Realmに対して試行されます。いずれかのレルムに対する認証が成功すれば、ユーザーの認証は成功です。

LockOutRealm実装は、以下の追加属性をサポートしています。

属性説明
allRolesMode

この属性は、web.xmlで認証制約を処理するときに、特別なロール名*がどのように処理されるかを制御します。デフォルトでは、仕様に準拠した値であるstrictが使用されます。これは、ユーザーがweb.xmlで定義されたロールのいずれかに割り当てられている必要があることを意味します。代替値は、ユーザーが認証されている必要があるが、割り当てられたロールのチェックは行われないことを意味するauthOnlyと、ユーザーが認証されている必要があり、ロールが定義されていない限り、割り当てられたロールのチェックは行われないことを意味するstrictAuthOnlyです。 web.xmlの場合、ユーザーはこれらのロールの少なくとも1つに割り当てられている必要があります。

cacheRemovalWarningTime

失敗したユーザーがキャッシュから削除される理由が、キャッシュが大きすぎるためであり、少なくともこの期間(秒単位)キャッシュに存在していた場合、警告メッセージがログに記録されます。デフォルトは3600(1時間)です。

cacheSize

認証に失敗したユーザーをキャッシュに保持する数。時間の経過とともに、キャッシュはこのサイズまで増加し、縮小しない可能性があります。デフォルトは1000です。

failureCount

ユーザーがロックアウトされるまでに連続して認証に失敗する必要がある回数。デフォルトは5です。

lockOutTime

認証の失敗が多すぎる場合に、ユーザーがロックアウトされる時間(秒単位)。デフォルトは300(5分)です。ロックアウト時間中のさらなる認証失敗により、ロックアウトタイマーがゼロにリセットされ、事実上ロックアウト時間が延長されます。ロックアウト期間中の有効な認証試行は成功しませんが、ロックアウト時間もリセットされません。

transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

LockOutRealmコンポーネントを使用してコンテナ管理セキュリティを設定する方法の詳細については、コンテナ管理セキュリティガイドを参照してください。

Null Realm - org.apache.catalina.realm.NullRealm

NullRealmは、ユーザー名と関連する資格情報の検証が試みられたときに常にnullを返す、Tomcat Realmインターフェースの最小限の実装です。他のレルムが指定されていない場合のデフォルトのレルム実装として使用することを目的としています。

NullRealm実装は、以下の追加属性をサポートしています。

属性説明
transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

認証済みユーザーRealm - org.apache.catalina.realm.AuthenticatedUserRealm

AuthenticatedUserRealm は、ユーザー資格情報の取得とユーザーの認証を行うAuthenticator実装 (SSLAuthenticator、SpnegoAuthenticator) での使用を想定しています。認証されたプリンシパルは、提示されたユーザー名から常に作成され、それ以上の検証は行われません。

**注意:** 提供された資格情報を検証しないAuthenticator実装でこのレルムを使用することは安全ではありません。

AuthenticatedUserRealm実装は、以下の追加属性をサポートしています。

属性説明
transportGuaranteeRedirectStatus

設定されたトランスポート保証の要件を満たすためにコンテナがHTTPリダイレクトを発行する必要がある場合に使用するHTTPステータスコード。指定されたステータスコードは検証されません。指定しない場合、デフォルト値の302が使用されます。

ネストされたコンポーネント

対応する要素を**Realm**要素内にネストすることで、以下のコンポーネントをネストできます。

  • **CombinedRealm実装** - *CombinedRealm実装*またはCombinedRealmを拡張するレルム(例:LockOutRealm)を使用している場合、1つ以上の**<Realm>**要素をその中にネストできます。
  • **CredentialHandler** - この要素のインスタンスは、レルム内に最大1つネストできます。これは、提供された資格情報とレルムによって保存された資格情報を検証するために使用される資格情報ハンドラーを構成します。指定しない場合、デフォルトの*MessageDigestCredentialHandler*が構成されます。

特別な機能

仮想ホストのシングルサインオンサポートの設定については、シングルサインオンを参照してください。