使用spring-security SPNEGO时如何使用多个SPN?

问题描述 投票:2回答:2

我正在使用spring-security 3.0.2.RELEASE和spring-security-kerberos-core 1.0.0.M2来实现基于SPNEGO的认证。

服务器有一个以上的有效DNS名。 一个是指机器本身(machine.domain),另一个是指应用程序(app.domain)。 目前没有设置反向代理。

我需要确保SPNEGO对这两个有效的DNS名都有效。 目前,我已经将机器名设置为SPN。 如果我使用IE7连接到应用程序,它可以连接到机器名称,但不能连接到应用程序名称(HTTP 401)。

我正在使用SunJaasKerberosTicketValidator来验证票据,但它一次只允许配置一个SPN。

我如何配置我的应用,使其能够使用多个SPN? 是否只需要使用setspn将SPN添加到列表中? 还是我需要设置多个票据验证器?

我的问题与这个问题非常相似(这个问题没有得到回答)。http:/forum.spring.ioforumspring-projectssecurity122250-spring-security-3-kerberos-spn。

谢谢你了

詹姆斯

spring spring-security kerberos spnego
2个回答
1
投票

只是一个快速的想法。

你可以定义两个 SunJaasKerberosTicketValidator 实例,每个实例都有自己的域,然后实现自己的 KerberosTicketValidator 它将根据HTTP请求委托给底层JAAS验证器。

如果您使用的是 RequestContextListener:

HttpServletRequest request = (HttpServletRequest) ((ServletWebRequest) 
        RequestContextHolder.currentRequestAttributes()).getNativeRequest();

0
投票

Pavel是对的,只是在ClassCastException尝试的情况下。

RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest()
© www.soinside.com 2019 - 2024. All rights reserved.