我有一个由Kerberos保护的集群,并且有一个REST API,需要代表用户与集群进行交互。我已经使用Spring Security和SPNEGO对用户进行身份验证,但是当我尝试使用Hadoop SDK时,由于我尝试的原因,它会因各种原因而失败。
当我尝试在用户登录后直接使用SDK时,它会给我SIMPLE authentication is not enabled
。
我注意到会话的Authenticator
是UserNamePasswordAuthenticationToken
这是没有意义的,因为我正在使用来自用户的凭据对Kerberos领域进行身份验证。
我正在尝试使用我自己的服务帐户和密钥表开箱即用这个项目:https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-spnego-form-auth
答案 0 :(得分:0)
首先,Spring Sec Kerberos Extension是一段可怕的代码。我已经评估了一次,并且不再使用它。您需要客户端的凭据对您的群集进行身份验证。你基本上有两个选择:
只要您拥有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。诺克斯摘自你。