0

我们正在尝试使用 Spring SAML Extension 来实现身份联合,这是安全断言标记语言 (SAML) V2.0 技术概述(5.4.3 使用持久假名标识符的联合)中描述的用例。

我们的应用程序尝试将远程用户与业务合作伙伴之间的 SSO 的本地帐户(在应用程序中)相关联。我们的申请是 SP,合作伙伴的申请是 IDP。

在这种情况下,如果用户尝试访问安全资源并且在我们的应用程序上没有登录会话,SP 会将用户重定向到 IDP。在 IDP 站点对用户进行身份验证后,将向 SP 断言消费者服务发送一个带有名称标识符的 HTTP 请求。在 SP 站点,如果名称标识符未映射到本地帐户,我们的应用程序将显示一个登录页面,要求用户提供我们应用程序的本地身份。在用户提供有效凭证之后,将创建一个本地会话,并且用户可以访问安全资源。还创建并保留了两个帐户(SP 和 IDP)的联合。

我搜索了很多示例,但没有找到清楚描述我需要的配置。我还没有找到描述如何实现这一点的 Spring 文档。

基本上,我的问题是如何创建/配置自定义登录屏幕并保持此身份联合。有什么想法、例子或文件吗?

顺便说一句,这与 Ping 联合中的帐户链接非常相​​似。

感谢您的帮助,非常感谢。

4

1 回答 1

0

一种解决方法是:

  • 实现将(持久)的SAMLUserDetailsService内容映射到本地帐户 的自定义AssertionNameID
    • 如果存在本地帐户,它会UserDetails使用用户数据填充例如一个对象并添加一个GrantedAuthority例如ROLE_FULL_ACCESS
    • 否则返回一个表示本地帐户丢失的对象,但不抛出异常
  • 实现一个自定义AuthenticationSuccessHandler,检测用户是否有本地帐户(基于Authentication从 填充数据的对象SAMLUserDetailsService
    • 如果用户有本地帐户,请继续到默认页面
    • 否则将用户重定向到带有挑战的页面以链接本地身份
  • 实现例如一个 MVC 控制器,或另一个 Spring Security 身份验证端点,它接受来自本地身份链接页面的回调(使用本地帐户的用户凭据)
    • 存储持久 ID 和本地帐户之间的链接
    • 使用反映所选本地帐户Authentication的新对象更新当前对象UserDetails
    • 将用户重定向到默认页面

应该只对完全经过身份验证的用户(即具有本地帐户的用户)可用的内容应该使用角色来保护ROLE_FULL_ACCESS,因此使用 IDP 进行身份验证但尚未执行链接的用户无法访问它。

于 2014-09-22T21:04:45.410 回答