我们正在尝试使用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联合中的帐户链接非常相似。
感谢您的帮助,非常感谢。
答案 0 :(得分:0)
解决这个问题的一种方法是:
SAMLUserDetailsService
,将Assertion
(持久NameID
)的内容映射到本地帐户
UserDetails
对象,并添加GrantedAuthority
例如ROLE_FULL_ACCESS
AuthenticationSuccessHandler
,用于检测用户是否拥有本地帐户(基于Authentication
对象,其中包含从SAMLUserDetailsService
填充的数据
Authentication
对象更新当前UserDetails
对象应该仅对完全通过身份验证的用户(即具有本地帐户的用户)可用的内容应使用角色ROLE_FULL_ACCESS
进行保护,因此使用IDP进行身份验证但未执行的用户无法访问该内容链接呢。