我有一个由kerberos保护的集群,还有一个restapi,它需要代表用户与集群交互。我已经使用springsecurity和spnego对用户进行了身份验证,但是当我尝试使用hadoopsdk时,基于我的尝试,它由于各种原因而失败。
当我尝试在用户登录后直接使用sdk时,它会 SIMPLE authentication is not enabled
.
我注意到会议的 Authenticator
是 UserNamePasswordAuthenticationToken
这是没有意义的,因为我正在使用用户的凭据对kerberos领域进行身份验证。
我正在尝试将此项目与我自己的服务帐户和keytab一起使用:https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-spnego-form-auth
2条答案
按热度按时间uxhixvfz1#
首先,springseckerberos扩展是一段糟糕的代码。我已经评估过一次了,并且放弃了使用它。您需要对群集进行身份验证的客户端的凭据。这里基本上有两种选择:
如果您使用的是tomcat,那么可以尝试springsecurity的jee-pre-auth Package 器以及trunk中的tomcatspnegoad验证器。如果您的服务器帐户受信任进行委派,则if将从客户端接收委派凭据,该凭据将使您能够执行任务。
如果以上不是一个选项,请使用带有Java8的s4u2proxy/s4u2self,代表用户主体获取kerberos票证,然后执行RESTAPI调用。
一旦你有了
GSSCredential
流程是一样的。免责声明:我不知道hadoop,但是gssapi过程总是一样的。
sc4hvdpw2#
不管它值多少钱,您都可以利用apacheknox(http://knox.apache.org)在安全集群中使用hadoop restapi。诺克斯将为您处理spnego与各种组件的谈判。您可以使用基于http报头的pre-auth sso提供程序将最终用户的标识传播到knox。
细节:http://knox.apache.org/books/knox-0-8-0/user-guide.html#preauthenticated+sso+提供程序
但是,如果您使用的是您的服务提供商,则需要确保只有受信任的客户端才能调用您的服务。
或者,您可以使用默认的shiro提供程序,使用用户名/密码通过ldap对knox进行身份验证。
以这种方式使用knox的最大好处之一是,您的服务永远不需要知道集群是否被kerberized。诺克斯是从你那里抽象出来的。