使用Spring SAML Extension实现身份联合

时间:2014-09-22 16:42:31

标签: spring single-sign-on saml federated-identity spring-saml

我们正在尝试使用Spring SAML Extension来实现身份联合,这是Security Assertion Markup Language (SAML) V2.0 Technical Overview中描述的用例(5.4.3联合使用持久性伪名称标识符)。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

解决这个问题的一种方法是:

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

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