我有一个受Kerberos保护的群集,并且有一个REST API,需要代表用户与该群集进行交互。我已经将Spring Security与SPNEGO一起使用来对用户进行身份验证,但是当我尝试使用Hadoop SDK时,基于我的尝试,它由于各种原因而失败。
当我在用户登录后尝试直接使用SDK时,它给了我SIMPLE authentication is not enabled
。
我注意到该 session 的Authenticator
是UserNamePasswordAuthenticationToken
,这没有意义,因为我正在使用用户的凭据针对Kerberos Realm 进行身份验证。
我正在尝试使用自己的服务帐户和密钥表直接使用此项目:https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-spnego-form-auth
最佳答案
物有所值,您可以利用Apache Knox(http://knox.apache.org)在安全集群中使用Hadoop REST API。诺克斯将为您与各种组件进行SPNEGO谈判。您可以使用基于HTTP header 的预身份验证SSO提供程序将最终用户的身份传播到Knox。
详细信息:http://knox.apache.org/books/knox-0-8-0/user-guide.html#Preauthenticated+SSO+Provider
但是,如果您正在使用该提供程序,则需要确保只有受信任的客户端才能调用您的服务。
或者,您可以使用默认Shiro提供程序使用用户名/密码针对LDAP对Knox进行身份验证。
以这种方式使用Knox的最大好处之一是,您的服务永远不需要了解群集是否被kerberized。诺克斯从您那里抽象出来。