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>