目前,我使用spring-security-saml2-sample项目(V1.0.1)作为SP,使用Shibboleth作为IdP . 我已经实现了Web SSO配置文件并尝试编写ECP客户端以使ECP配置文件正常工作 . 但是,我发现 Spring 季安全标准中有关ECP配置文件的文件有限(参考文档第10.4章) .

我在github中找到了两个有用的ECP客户端示例:

github.com/spaetow/ShibbolethECPAuthClient

github.com/DARIAH-DE/shib-http-client

在SP的元数据生成器中启用PAOS绑定和“ecpEnabled”后,我编写了一些示例ECP客户端代码,参考上述两个项目,主要流程为:

  • 使用PAOS相关标头向"localhost:8080/spring-security-saml2-sample/saml/login"发送获取请求 .

  • 获取响应(SAML请求)并生成SAML信封 .

  • 使用新生成的SAML Envelope发布到Shibboleth IdP(https://exampleIDP/idp/profile/SAML2/SOAP/ECP),并在授权标头中使用用户名/密码(基本身份验证) .

  • Shibboleth使用SAML断言(也是SAML信封)进行身份验证和响应 .

  • 将SAML断言(信封)发送到SP:"localhost:8080/spring-security-saml2-sample/saml/SSO"并获得响应 .

我认为我在前四个步骤中取得了成功,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吗?

提前致谢!