我正在尝试使用JETTY支持单点登录,我们有2个子域运行支持通过Jetty's SSO support进行单点登录的网络服务器。
account.test.com app.test.com
我们有一个设置为* .test.com的SSOSession cookie,但为了支持签名,我需要确保在app.test.com上运行的Jetty服务器重置了JSESSIONID cookie。
我正在使用Jetty JAAS FormAuthenticator并重写SSORealm以支持在调用FormAuthenticator时验证SSOSession cookie。
我希望能够让account.test.com允许用户在那里登录,这将导致它使app.test.com上使用的JSESSIONID cookie无效。
我可以做的一个可能更正确的解决方案是检测SSOSession cookie的更改并使我的服务器上的JSESSIONID无效。
答案 0 :(得分:0)
我对Jetty以及JSESSIONID的工作原理一无所知,但听起来你想将JSESSIONID的有效性与特定的SSOSession cookie联系起来。
一种可能性 - 在app.test.com上创建新会话时,除了新的JSESSIONID之外,在域app.test.com中设置一个新的cookie,即SSOSig = MD5(JSESSIONID + SSOSessionCookie + secret)。
当用户与app.test.com交互时,服务器将接收JSESSIONID,SSOSig和SSOSessionID。如果由于在account.test.com上登录而导致SSOSessionID发生更改,那么您将收到JSESSIONID,SSOSig和SSOSessionID'。现在,您尝试验证SSOSig将失败,因为MD5(JSESSIONID + SSOSessioID'+ secret)!= SSOSig,此时您可以使JSESSIONID无效。