目前,我使用spring-security-saml2-sample项目(V1.0.1)作为SP,而Shibboleth作为IdP使用。我已经实现了Web SSO配置文件并尝试编写ECP客户端以使ECP配置文件正常工作。但是,我在Spring security saml中找到了有关ECP配置文件的有限文档(参考文档第10.4章)。
我在github中找到了两个有用的ECP客户端示例:
github.com/spaetow/ShibbolethECPAuthClient
github.com/DARIAH-DE/shib-http-client
在SP的元数据生成器中启用PAOS绑定和“ecpEnabled”之后,我写了一些示例ECP客户端代码,参考上面两个项目,主要流程是:
我认为我在前四个步骤中取得了成功,Shibboleth可以对用户进行身份验证并发送SAML响应。但是我在第五步遇到了一些问题。甚至一些例子在第4步结束。
我发现,spring security saml获得了第5个请求,并尝试像WebSSO配置文件那样验证SAML响应。逻辑位于“org.springframework.security.saml.SAMLProcessingFilter”中。解析saml响应并获取身份验证后,响应将重定向到默认目标URL“/”。逻辑在AbstractAuthenticationTargetUrlRequestHandler.handle(req,resp,authn)中。所以,我只能在ECP客户端获得302 HTTP响应。
以下是我的问题:
我想在第5步获取用户信息,是否必须编写另一个过滤器而不是“SAMLProcessingFilter”来发送身份验证作为响应?或者还有其他方法(我认为ECP客户端无法解析步骤4中收到的SAML断言)?
在这种情况下,我的ECP客户端非常喜欢“Rest客户端”,因为我没有在我的代码中记录任何cookie。因此,在第5步(登录后)之后,如何再次访问SP以获取其他资源?这是否意味着我必须在ECP客户端中记录JSessionID cookie?
SAML SSO(WebSSO)的理论是否像Jasig CAS(使用cookie /会话)?如果是这样,在ECP模式下,如何在两个ECP客户端上单独登录(每个客户端连接到不同的SP,但SP连接到同一个IdP)。或者,我可以在ECP客户端和浏览器中进行SSO吗?
提前致谢!