将SPNEGO凭据转发到安全群集

时间:2016-03-07 16:41:31

标签: hadoop kerberos spnego spring-security-kerberos

我有一个由Kerberos保护的集群,并且有一个REST API,需要代表用户与集群进行交互。我已经使用Spring Security和SPNEGO对用户进行身份验证,但是当我尝试使用Hadoop SDK时,由于我尝试的原因,它会因各种原因而失败。

当我尝试在用户登录后直接使用SDK时,它会给我SIMPLE authentication is not enabled

我注意到会话的AuthenticatorUserNamePasswordAuthenticationToken这是没有意义的,因为我正在使用来自用户的凭据对Kerberos领域进行身份验证。

我正在尝试使用我自己的服务帐户和密钥表开箱即用这个项目:https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-spnego-form-auth

2 个答案:

答案 0 :(得分:0)

首先,Spring Sec Kerberos Extension是一段可怕的代码。我已经评估了一次,并且不再使用它。您需要客户端的凭据对您的群集进行身份验证。你基本上有两个选择:

  1. 如果您使用的是Tomcat,则可以尝试使用Spring Security的JEE pre-auth包装器以及Tomcat SPNEGO AD Authenticator from trunk。如果将从客户端接收委托凭证,这将使您能够执行任务,假设您的服务器帐户受信任以进行委派。
  2. 如果以上不是选项,请使用Java 8求助于S4U2Proxy / S4U2Self并代表用户主体获取Kerberos票证,然后执行REST API调用。
  3. 只要您拥有GSSCredential,流量就会相同。

    免责声明:我不了解Hadoop,但GSS-API流程总是一样。

答案 1 :(得分:0)

对于它的价值,您可以利用Apache Knox(http://knox.apache.org)来使用安全集群中的Hadoop REST API。 Knox将为您提供SPNEGO与各种组件的协商。您可以使用基于HTTP头的pre-auth SSO提供程序将最终用户的身份传播到Knox。

详细信息:http://knox.apache.org/books/knox-0-8-0/user-guide.html#Preauthenticated+SSO+Provider

如果您正在使用该提供商,则需要确保只有受信任的客户才能调用您的服务。

或者,您可以使用默认的Shiro提供程序使用用户名/密码对Knox进行LDAP身份验证。

以这种方式使用Knox的一大好处是,您的服务永远不需要知道集群是否是kerberized。诺克斯摘自你。