RESTAPI(Tomcat)的Spring安全Kerberos SSO

RESTAPI(Tomcat)的Spring安全Kerberos SSO,spring,rest,tomcat,kerberos,spring-security-kerberos,Spring,Rest,Tomcat,Kerberos,Spring Security Kerberos,我的问题是: 上下文: -使用ActiveDirectory的Windows Server 2012 -雄猫 -RESTAPI(春季) 我目前正试图限制REST请求。我希望只有特定的广告组才能访问特定的资源。我仅限于Kerberos身份验证 系统配置 在域“Tomcat”中创建用户 setspn-一个HTTP/apirest。domain@DOMAIN 使用ktpass生成tomcat.keytab API rest配置 我使用的是github上的spring安全示例,您可以在这里找到: 我知

我的问题是:

上下文: -使用ActiveDirectory的Windows Server 2012 -雄猫 -RESTAPI(春季)

我目前正试图限制REST请求。我希望只有特定的广告组才能访问特定的资源。我仅限于Kerberos身份验证

系统配置

  • 在域“Tomcat”中创建用户
  • setspn-一个HTTP/apirest。domain@DOMAIN
  • 使用ktpass生成tomcat.keytab
  • API rest配置

    我使用的是github上的spring安全示例,您可以在这里找到:

    我知道有一个入口点,在我的上下文(API Rest)中不需要它。我选择此示例是因为它似乎使用windows身份验证上下文,并使用它在spring安全上下文中自动对我进行身份验证。紧接着,将发送一个ldap请求,以提取有关已登录用户的所有信息。在我的情况下,我需要提取组

    我还使用:

    使用类“RoleStripinglDapUserDetailsMapper.java”而不是“ActiveDirectoryLdapAuthoritiesPopulator”提取用户角色。此实现还提供本地主机身份验证,但NTLM令牌的问题似乎在spring security的最后一次提交中得到了解决

    我不确定这是否是我想要的正确方式

    我的身份验证似乎失败了,我的日志中只有一个地方出了问题

    “未设置属性‘userDn’-匿名上下文将用于读写操作”

    问题

  • 我是否必须使用tomcat帐户运行我的tomcat服务?(似乎是的,是的)
  • 我在Kerberos安全性方面做得对吗
  • 如何摆脱匿名上下文
  • 匿名上下文似乎正好在Tomcat启动之后设置。我希望在我的用户(例如,user1)请求RESTAPI(EntryPoint或其他)之后获取上下文
  • 如果有不清楚的地方,请告诉我,我会尝试重新表述


    谢谢,

    您不需要查询LDAP来获取有关用户所属组的信息。Active Directory已经将此信息添加到从浏览器发送到Tomcat的Kerberos票证中

    您只需要从令牌中提取这些信息,例如使用library。它是受project启发的Spring集成,所以切换到它应该很容易


    如果仍要查询LDAP,则需要在LDAP中进行身份验证,然后才能进行任何查询。同样,也不需要使用最终用户帐户-您可以使用“Tomcat”帐户使用keytab文件和查询组。我找到了解决问题的方法

    在RESTAPI上下文中,没有入口点。我试图将我的入口点设置为一个未映射的URL,只是为了进行协商。通过这样做,您将收到一个HTTP响应,错误代码为404(未找到),但正确的头是由spring security(WWW Authenticate)添加的

    如果错误代码不是401,web浏览器将不发送票证服务

    要解决此问题,您必须创建一个CustomEntryPoint类(实现AuthenticationEntryPoint),并且您需要重写“开始”方法以返回具有正确头的401 HTTP代码


    我希望这能有所帮助。如果有更好的办法,让我知道

    请避免同时问多个不同的问题。请参阅页面以获取澄清此问题的帮助。谢谢,我下次会记住它。谢谢您的回答,我将尝试使用LDAP查询解决方案,以避免导入更多依赖项。奇怪的是,我们无法使用spring security(使用本机库)从用户令牌中提取组。@csik基于对github的承诺spring security kerberos的主动开发在3年前停止,因此它没有很多kerberos功能。不过,使用tomcat kerberos帐户查询LDAP应该可以工作