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文件必须是Web应用程序类路径以及Log4j配置文件的一部分。
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或类名。如果未指定,将使用文件实现;否则,将使用随机实现。如果要使用“文件”,则需要指定signature.secret.file并指向机密文件。
重要信息:必须配置并运行KDC。
要将Kerberos SPNEGO用作身份验证机制,必须使用以下初始化参数配置身份验证过滤器:
[PREFIX。] type:关键字kerberos。
[PREFIX。] kerberos.principal:Web应用程序的Kerberos主体名称。Kerberos主体名称必须以HTTP / ...开头。例如:HTTP / localhost @ LOCALHOST。没有默认值。
[PREFIX。] kerberos.keytab:密钥表文件的路径,该文件包含kerberos主体的凭据。例如:/Users/tucu/tucu.keytab。没有默认值。
范例:
<web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”> ... <过滤器> <filter-name> kerberosFilter </ filter-name> <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class> <init-param> <param-name>类型</ param-name> <param-value> kerberos </ param-value> </ init-param> <init-param> <param-name>令牌。有效性</ 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-name> kerberosFilter </ filter-name> <url-pattern> / kerberos / * </ url-pattern> </ filter-mapping> ... </ web-app>
要将Pseudo / Simple用作身份验证机制(信任查询字符串参数'user.name'的值),必须使用以下初始化参数配置身份验证过滤器:
[PREFIX。] type:关键字simple。
[PREFIX。] simple.anonymous.allowed:是一个布尔参数,指示是否允许匿名请求。默认值为false。
范例:
<web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”> ... <过滤器> <filter-name> simpleFilter </ filter-name> <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class> <init-param> <param-name>类型</ param-name> <param-value>简单</ param-value> </ init-param> <init-param> <param-name>令牌。有效性</ 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-name> simpleFilter </ filter-name> <url-pattern> /简单/ * </ 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-name> kerberosFilter </ filter-name> <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class> <init-param> <param-name>类型</ 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>令牌。有效性</ 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-name> kerberosFilter </ filter-name> <url-pattern> / kerberos / * </ url-pattern> </ filter-mapping> ... </ web-app>
重要信息:必须配置并运行LDAP服务器。当启用TLS与LDAP服务器通信时(通过ldaps方案或“ start TLS”扩展名),请在本地信任库中配置LDAP服务器的公共证书。
LDAP身份验证机制使用HTTP基本身份验证方案来针对配置的LDAP(或Active Directory)服务器验证用户指定的凭据。认证过滤器必须配置以下初始化参数:
[PREFIX。] type:关键字ldap。
[PREFIX。] ldap.providerurl:LDAP服务器的URL。
[PREFIX。] ldap.basedn:LDAP服务器要使用的基本专有名称(DN)。此值将附加到提供的用户标识中,以进行认证。对于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-name> authFilter </ filter-name> <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class> <init-param> <param-name>类型</ 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-name> authFilter </ filter-name> <url-pattern> / ldap / * </ url-pattern> </ filter-mapping> ... </ web-app>
重要说明:此配置一起支持多种身份验证机制(例如kerberos,ldap等)。有关配置的详细信息,请参阅每个方案的文档。
多方案身份验证机制通过实现HTTP身份验证协商机制(请参阅RFC-2616)来支持多种身份验证机制(例如kerberos,ldap等)。为了启用每种类型的身份验证机制(例如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。<方案名称> .handler:用于指定认证方案的认证处理程序实现。它没有默认值(例如,multi-scheme-auth-handler.schemes.negotiate.handler = kerberos)。为配置的每个方案添加此处理程序配置。
除了这些参数之外,还请为每个配置的处理程序指定初始化参数。
范例:
<web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”> ... <过滤器> <filter-name> authFilter </ filter-name> <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class> <init-param> <param-name>类型</ param-name> <param-value>多种方案</ param-value> </ init-param> <init-param> <param-name> multi-scheme-auth-handler.schemes </ param-name> <param-value>基本,协商</ 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>令牌。有效性</ 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-name> authFilter </ filter-name> <url-pattern> / multi-scheme / * </ url-pattern> </ filter-mapping> ... </ web-app>
SignerSecretProvider用于为用于签署HTTP Cookies的秘密提供更高级的行为。
这些是相关的配置属性:
signer.secret.provider:指示要使用的SignerSecretProvider类的名称。可能的值为:“文件”,“随机”,“动物园管理员”或类名。如果未指定,将使用“文件”实现;否则,将使用“随机”实现。如果要使用“文件”,则需要指定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”> ... <过滤器> <!-未显示AuthenticationHandler配置-> <init-param> <param-name> signer.secret.provider </ param-name> <param-value>文件</ 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”> ... <过滤器> <!-未显示AuthenticationHandler配置-> <init-param> <param-name> signer.secret.provider </ param-name> <param-value>随机</ param-value> </ init-param> <init-param> <param-name>令牌。有效性</ 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”> ... <过滤器> <!-未显示AuthenticationHandler配置-> <init-param> <param-name> signer.secret.provider </ param-name> <param-value>动物园管理员</ param-value> </ init-param> <init-param> <param-name>令牌。有效性</ 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>