无法从 IE 中找到凭据导致 HDFS WebUI Kerberos 身份验证失败

HDFS WebUI Kerberos Authentication failed by credential can't be found from IE

我使用 kerberos 身份验证设置我的 HDFS 服务,这是配置:

<property>
    <name>hadoop.http.filter.initializers</name>
    <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
</property>

<property>
    <name>hadoop.http.authentication.type</name>
    <value>kerberos</value>
</property>

<property>
    <name>hadoop.http.authentication.simple.anonymous.allowed</name>
    <value>false</value>
</property>

<property>
    <name>hadoop.http.authentication.signature.secret.file</name>
    <value>/opt/hadoop/hdfs/default/etc/hadoop/hadoop-http-auth-signature-secret</value>
</property>

<property>
    <name>hadoop.http.authentication.kerberos.principal</name>
    <value>HTTP/192.168.47.143@CLOUD.LOCAL</value>
</property>

<property>
    <name>hadoop.http.authentication.kerberos.keytab</name>y4
    <value>/opt/hadoop/hdfs/default/etc/hadoop/HTTP.keytab</value>
</property>

<property>
    <name>hadoop.http.authentication.cookie.domain</name>y4
    <value>CLOUD.LOCAL</value>
</property>

我可以通过 运行 在 Linux 环境中测试身份验证:

$ kinit "HTTP/192.168.47.143@CLOUD.LOCAL"

$ curl -k -v -u "HTTP/192.168.47.143@CLOUD.LOCAL" --negotiate https://...:50470

这个returns内容不错

但是当我尝试从 Windows IE 访问时,它 returns:

GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos credentails)

我已经将/etc/krb5.conf 从服务器复制到C:\Windows\krb5.ini 并将主机名添加到安全区域。我还应该怎么做才能让 IE 识别在哪里可以找到密钥?

我什至尝试安装 MIT Kerberos 应用程序 (http://doc.mapr.com/display/MapR/Configuring+Kerberos+Authentication+for+Windows) 以启用身份验证环境,但它仍然不起作用,我现在不知道。

Windows 客户端默认不需要 C:\Windows\krb5.ini 来协商 Kerberos。尽管您会需要它,但如果您尝试执行一些高级过程,例如在 Windows 系统本身上验证 Kerberos keytab。展望未来,将文件保留在原处并没有什么坏处。我认为问题确实与 IE 安全区域设置有关。这可能是您可能错过的东西 - 因为这可能很棘手。

  1. http://192.168.47.143*.cloud.local 添加到客户端计算机上的 IE 本地 Intranet 区域。
  2. 确保 Windows 凭据配置为发送到 Intranet 区域中的远程服务器(这是默认设置)。
  3. 在 IE 高级选项卡下,必须选中 "Enable Integrated Windows Authentication" 框。
  4. 我会清除IE Temporary Internet Files,然后运行klist purge,然后重启IE再测试。

请注意,Kerberos 最适合主机名。最佳实践是避免使用 IP 地址。使用 Kerberos,客户端必须与目标资源位于同一域中 除非 (1) 在域之间存在有效的、可验证的信任,并且 (2) 目标资源必须是ACL倒是允许客户端访问。否则令牌可能会被视为 NTLM,在这种情况下,SPNEGO 库会将其视为 "defective token".