AuthenticationFilter フィルターは、Hadoop Auth のサーバー側コンポーネントです。
このフィルターは、認証されたリクエストが必要なすべての Web アプリケーションリソースの前に設定する必要があります。例:
Hadoop Auth および依存 JAR ファイルは、Web アプリケーションのクラスパス (通常はWEB-INF/lib
ディレクトリ) に配置する必要があります。
Hadoop Auth は、ログに SLF4J-API を使用します。Auth Maven POM の依存関係は SLF4J API の依存関係を定義しますが、具体的なログ実装の依存関係は定義しません。これは Web アプリケーションに明示的に追加する必要があります。たとえば、Web アプリケーションで Log4j を使用している場合、SLF4J-LOG4J12 および LOG4J jar ファイルは、Log4j 構成ファイルと同様に Web アプリケーションのクラスパスの一部である必要があります。
config.prefix
: 指定した場合、他のすべての設定パラメータ名は、このプレフィックスで始まる必要があります。デフォルト値はプレフィックスなしです。
[PREFIX.]type
: 認証タイプのキーワード (simple
または
kerberos
) または認証ハンドラーの実装。
[PREFIX.]signature.secret.file
: signer.secret.provider
が file
に設定されている場合、これは HTTP Cookie に署名するために使用される秘密鍵を含むファイルの場所です。
[PREFIX.]token.validity
: 生成された認証トークンの有効期間 (秒単位)。デフォルト値は 36000
秒です。これは、signer.secret.provider
が random
または zookeeper
に設定されている場合、ロールオーバー間隔にも使用されます。
[PREFIX.]cookie.domain
: 認証トークンを格納する HTTP Cookie に使用するドメイン。
[PREFIX.]cookie.path
: 認証トークンを格納する HTTP Cookie に使用するパス。
signer.secret.provider
: 使用する SignerSecretProvider クラスの名前を示します。可能な値は、file
、random
、zookeeper
、またはクラス名です。指定しない場合は、file
実装が使用されます。それが失敗した場合は、random
実装が使用されます。"file" を使用する場合は、signature.secret.file
を指定して、秘密鍵ファイルを示す必要があります。
重要: KDC を設定して実行する必要があります。
Kerberos SPNEGO を認証メカニズムとして使用するには、認証フィルターを次の初期化パラメータで構成する必要があります
[PREFIX.]type
: キーワード kerberos
。
[PREFIX.]kerberos.principal
: Web アプリケーションの Kerberos プリンシパル名。Kerberos プリンシパル名は HTTP/...
で始まる必要があります。例: HTTP/localhost@LOCALHOST
。デフォルト値はありません。
[PREFIX.]kerberos.keytab
: Kerberos プリンシパルのクレデンシャルを含む keytab ファイルへのパス。例: /Users/tucu/tucu.keytab
。デフォルト値はありません。
例:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <filter> <filter-name>kerberosFilter</filter-name> <filter-class>org.apache.hadoop.security.authentication.server.AuthenticationFilter</filter-class> <init-param> <param-name>type</param-name> <param-value>kerberos</param-value> </init-param> <init-param> <param-name>token.validity</param-name> <param-value>30</param-value> </init-param> <init-param> <param-name>cookie.domain</param-name> <param-value>.foo.com</param-value> </init-param> <init-param> <param-name>cookie.path</param-name> <param-value>/</param-value> </init-param> <init-param> <param-name>kerberos.principal</param-name> <param-value>HTTP/localhost@LOCALHOST</param-value> </init-param> <init-param> <param-name>kerberos.keytab</param-name> <param-value>/tmp/auth.keytab</param-value> </init-param> </filter> <filter-mapping> <filter-name>kerberosFilter</filter-name> <url-pattern>/kerberos/*</url-pattern> </filter-mapping> ... </web-app>
疑似/シンプルを認証メカニズムとして使用する (クエリ文字列パラメータ 'user.name' の値を信頼する) には、認証フィルターを次の初期化パラメータで構成する必要があります
[PREFIX.]type
: キーワード simple
。
[PREFIX.]simple.anonymous.allowed
: 匿名リクエストを許可するかどうかを示すブール値パラメータです。デフォルト値は false
です。
例:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <filter> <filter-name>simpleFilter</filter-name> <filter-class>org.apache.hadoop.security.authentication.server.AuthenticationFilter</filter-class> <init-param> <param-name>type</param-name> <param-value>simple</param-value> </init-param> <init-param> <param-name>token.validity</param-name> <param-value>30</param-value> </init-param> <init-param> <param-name>cookie.domain</param-name> <param-value>.foo.com</param-value> </init-param> <init-param> <param-name>cookie.path</param-name> <param-value>/</param-value> </init-param> <init-param> <param-name>simple.anonymous.allowed</param-name> <param-value>false</param-value> </init-param> </filter> <filter-mapping> <filter-name>simpleFilter</filter-name> <url-pattern>/simple/*</url-pattern> </filter-mapping> ... </web-app>
重要: KDC を設定して実行する必要があります。
AltKerberos 認証メカニズムは、Kerberos SPNEGO 認証メカニズムの部分的に実装された派生物であり、Kerberos SPNEGO がブラウザ以外で使用される一方、別の認証形式 (ユーザーが実装する) がブラウザに使用される「混合」形式の認証を可能にします。AltKerberos を認証メカニズムとして使用するには (実装を提供することに加えて)、認証フィルターを、前述の Kerberos SPNEGO パラメータに加えて、次の初期化パラメータで構成する必要があります
[PREFIX.]type
: 使用する AltKerberosAuthenticationHandler の実装の完全なクラス名。
[PREFIX.]alt-kerberos.non-browser.user-agents
: ブラウザ以外と見なされるユーザーエージェントのコンマ区切りのリスト。
例:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <filter> <filter-name>kerberosFilter</filter-name> <filter-class>org.apache.hadoop.security.authentication.server.AuthenticationFilter</filter-class> <init-param> <param-name>type</param-name> <param-value>org.my.subclass.of.AltKerberosAuthenticationHandler</param-value> </init-param> <init-param> <param-name>alt-kerberos.non-browser.user-agents</param-name> <param-value>java,curl,wget,perl</param-value> </init-param> <init-param> <param-name>token.validity</param-name> <param-value>30</param-value> </init-param> <init-param> <param-name>cookie.domain</param-name> <param-value>.foo.com</param-value> </init-param> <init-param> <param-name>cookie.path</param-name> <param-value>/</param-value> </init-param> <init-param> <param-name>kerberos.principal</param-name> <param-value>HTTP/localhost@LOCALHOST</param-value> </init-param> <init-param> <param-name>kerberos.keytab</param-name> <param-value>/tmp/auth.keytab</param-value> </init-param> </filter> <filter-mapping> <filter-name>kerberosFilter</filter-name> <url-pattern>/kerberos/*</url-pattern> </filter-mapping> ... </web-app>
重要: LDAP サーバーを設定して実行する必要があります。LDAP サーバーとの通信に TLS を有効にする場合 (ldaps スキームまたは「start TLS」拡張を使用)、ローカルトラストストアで LDAP サーバーの公開証明書を構成します。
LDAP 認証メカニズムは、HTTP Basic 認証スキームを使用して、構成された LDAP (または Active Directory) サーバーに対してユーザーが指定したクレデンシャルを検証します。認証フィルターは、次の初期化パラメータで構成する必要があります
[PREFIX.]type
: キーワード ldap
。
[PREFIX.]ldap.providerurl
: LDAP サーバーの URL。
[PREFIX.]ldap.basedn
: LDAP サーバーで使用する基本識別名 (DN)。この値は、認証目的で指定されたユーザー ID に追加されます。このプロパティは、Active Directory サーバーの場合には役に立ちません。
[PREFIX.]ldap.binddomain
: LDAP サーバーで使用する LDAP バインドドメイン値。このプロパティはオプションであり、Active Directory サーバーの場合にのみ役立ちます (例: example.com)。
[PREFIX.]ldap.enablestarttls
: LDAP サーバーが「StartTLS」拡張をサポートするかどうかを定義するために使用されるブール値。
例:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <filter> <filter-name>authFilter</filter-name> <filter-class>org.apache.hadoop.security.authentication.server.AuthenticationFilter</filter-class> <init-param> <param-name>type</param-name> <param-value>ldap</param-value> </init-param> <init-param> <param-name>ldap.providerurl</param-name> <param-value>ldap://ldap-server-host:8920</param-value> </init-param> <init-param> <param-name>ldap.basedn</param-name> <param-value>ou=users,dc=example,dc=com</param-value> </init-param> <init-param> <param-name>ldap.enablestarttls</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>authFilter</filter-name> <url-pattern>/ldap/*</url-pattern> </filter-mapping> ... </web-app>
重要: この設定は、複数の認証メカニズム (例: kerberos、ldap など) を一緒にサポートします。設定関連の詳細については、個々のスキームのドキュメントを参照してください。
マルチスキーム認証メカニズムは、HTTP 認証ネゴシエーションメカニズムを実装することにより、複数の認証メカニズム (例: kerberos、ldap など) をサポートします (RFC-2616 を参照)。各タイプの認証メカニズム (例: ldap) を有効にするには、対応する認証ハンドラーを構成する必要があります。次の設定パラメータを参照してください
[PREFIX.]type
: キーワード multi-scheme
。
[PREFIX.]multi-scheme-auth-handler.schemes
: このハンドラーでサポートされる HTTP 認証メカニズムのコンマ区切りリスト。必須パラメータであり、デフォルト値はありません (例: multi-scheme-auth-handler.schemes=basic,negotiate)。
[PREFIX.]multi-scheme-auth-handler.schemes.<scheme-name>.handler
: 指定された認証スキームに使用する認証ハンドラーの実装。デフォルト値はありません (例: multi-scheme-auth-handler.schemes.negotiate.handler=kerberos)。構成された各スキームに対して、このハンドラー構成を追加してください。
これらのパラメーターに加えて、構成された各ハンドラーの初期化パラメーターも指定してください。
例:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <filter> <filter-name>authFilter</filter-name> <filter-class>org.apache.hadoop.security.authentication.server.AuthenticationFilter</filter-class> <init-param> <param-name>type</param-name> <param-value>multi-scheme</param-value> </init-param> <init-param> <param-name>multi-scheme-auth-handler.schemes</param-name> <param-value>basic,negotiate</param-value> </init-param> <init-param> <param-name>multi-scheme-auth-handler.basic.handler</param-name> <param-value>ldap</param-value> </init-param> <init-param> <param-name>multi-scheme-auth-handler.negotiate.handler</param-name> <param-value>kerberos</param-value> </init-param> <init-param> <param-name>ldap.providerurl</param-name> <param-value>ldap://ldap-server-host:8920</param-value> </init-param> <init-param> <param-name>ldap.basedn</param-name> <param-value>ou=users,dc=example,dc=com</param-value> </init-param> <init-param> <param-name>ldap.enablestarttls</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>token.validity</param-name> <param-value>30</param-value> </init-param> <init-param> <param-name>cookie.domain</param-name> <param-value>.foo.com</param-value> </init-param> <init-param> <param-name>cookie.path</param-name> <param-value>/</param-value> </init-param> <init-param> <param-name>kerberos.principal</param-name> <param-value>HTTP/localhost@LOCALHOST</param-value> </init-param> <init-param> <param-name>kerberos.keytab</param-name> <param-value>/tmp/auth.keytab</param-value> </init-param> </filter> <filter-mapping> <filter-name>authFilter</filter-name> <url-pattern>/multi-scheme/*</url-pattern> </filter-mapping> ... </web-app>
SignerSecretProvider は、HTTP Cookie の署名に使用されるシークレットに対して、より高度な動作を提供するために使用されます。
以下が関連する構成プロパティです。
signer.secret.provider
: 使用する SignerSecretProvider クラスの名前を示します。指定可能な値は、「file」、「random」、「zookeeper」、またはクラス名です。指定しない場合、「file」実装が使用され、それが失敗した場合は「random」実装が使用されます。「file」を使用する場合は、signature.secret.file
を指定して、シークレットファイルを指す必要があります。
[PREFIX.]signature.secret.file
: signer.secret.provider
が file
に設定されているか、指定されていない場合、これは HTTP Cookie の署名に使用されるシークレットの値です。
[PREFIX.]token.validity
: 生成された認証トークンの有効期間 (秒単位)。デフォルト値は 36000
秒です。これは、signer.secret.provider
が random
または zookeeper
に設定されている場合、ロールオーバー間隔にも使用されます。
以下の構成プロパティは、zookeeper
実装に固有のものです。
signer.secret.provider.zookeeper.connection.string
: 接続する ZooKeeper 接続文字列を示します。デフォルト値は localhost:2181
です。
signer.secret.provider.zookeeper.path
: シークレットの保存と取得に使用する ZooKeeper パスを示します。シークレットを連携する必要があるすべてのサーバーは、同じパスを指す必要があります。
signer.secret.provider.zookeeper.auth.type
: 使用する認証タイプを示します。サポートされている値は、none
および sasl
です。デフォルト値は none
です。
signer.secret.provider.zookeeper.kerberos.keytab
: Kerberos keytab ファイルへのパスを設定します。これは、Kerberos を使用する場合にのみ必要です。
signer.secret.provider.zookeeper.kerberos.principal
: 使用する Kerberos プリンシパルを設定します。これは、Kerberos を使用する場合にのみ必要です。
signer.secret.provider.zookeeper.disconnect.on.shutdown
: プロバイダーがシャットダウンされたときに、ZooKeeper 接続を閉じるかどうか。デフォルト値は true
です。カスタム Curator クライアントが提供されており、接続解除が別の場所で処理されている場合にのみ、これを false
に設定してください。
必要に応じて、ServletContext の次の属性も設定できます。* signer.secret.provider.zookeeper.curator.client
: CuratorFramework クライアントオブジェクトをここに渡すことができます。指定した場合、「zookeeper」実装は、独自のクライアントを作成する代わりに、この Curator クライアントを使用します。これは、既に Curator クライアントを持っている場合や、その構成をより詳細に制御したい場合に役立ちます。
例:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <filter> <!-- AuthenticationHandler configs not shown --> <init-param> <param-name>signer.secret.provider</param-name> <param-value>file</param-value> </init-param> <init-param> <param-name>signature.secret.file</param-name> <param-value>/myapp/secret_file</param-value> </init-param> </filter> ... </web-app>
例:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <filter> <!-- AuthenticationHandler configs not shown --> <init-param> <param-name>signer.secret.provider</param-name> <param-value>random</param-value> </init-param> <init-param> <param-name>token.validity</param-name> <param-value>30</param-value> </init-param> </filter> ... </web-app>
例:
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> ... <filter> <!-- AuthenticationHandler configs not shown --> <init-param> <param-name>signer.secret.provider</param-name> <param-value>zookeeper</param-value> </init-param> <init-param> <param-name>token.validity</param-name> <param-value>30</param-value> </init-param> <init-param> <param-name>signer.secret.provider.zookeeper.connection.string</param-name> <param-value>zoo1:2181,zoo2:2181,zoo3:2181</param-value> </init-param> <init-param> <param-name>signer.secret.provider.zookeeper.path</param-name> <param-value>/myapp/secrets</param-value> </init-param> <init-param> <param-name>signer.secret.provider.zookeeper.kerberos.keytab</param-name> <param-value>/tmp/auth.keytab</param-value> </init-param> <init-param> <param-name>signer.secret.provider.zookeeper.kerberos.principal</param-name> <param-value>HTTP/localhost@LOCALHOST</param-value> </init-param> </filter> ... </web-app>