【问题标题】:Spring saml SSO春季山姆 SSO
【发布时间】:2017-11-03 06:44:21
【问题描述】:
我有一个使用 spring security 和 mvc 框架开发的门户应用程序。此门户应用程序连接到 IDP(使用 Spring security 和 spring saml 开发)进行身份验证。如果用户认证成功,用户将被导航到主页,该主页为外部应用程序提供了多个链接……当用户点击应用程序链接时,用户应该成功导航到相应的应用程序,而无需挑战登录页面。
其他应用程序是使用 struts 和 spring security 开发的。我如何确保从门户中单击链接时,将 saml 令牌或上下文传递给其他应用程序,因此它不会要求登录。
非常感谢任何帮助。
【问题讨论】:
标签:
spring
security
single-sign-on
saml
【解决方案1】:
最常见的 SAML 流程如下所示:
- 应用程序(称为服务提供商或 SP)接收来自未经身份验证的用户的请求(任何请求,例如对业务资源的请求)
- 它将用户(最常见的是通过 http 重定向)重定向到 IdP(SP 应该已经在其中注册)
- 如果用户未通过 IdP 的身份验证(未登录到 SSO),则会显示登录表单并由 IdP 管理登录,直到与 IdP 建立用户会话
- 如果用户已经通过 IdP 进行了身份验证(因为他已经是或输入了正确的用户/密码),IdP 会发出其声明令牌并将带有令牌的用户发送回 SP 中的断言消费者服务 (原始申请)
- 断言消费者服务(实际上只是一个 API 端点)接收并验证 SAML 令牌并创建自己的与用户的应用程序会话。现在用户已通过应用程序 (SP) 的身份验证
- 在向应用程序 (SP) 发出下一个请求时,已经存在会话,因此不涉及 SAML
请注意,如果已经与 IdP 建立了会话,那么所有这些对于用户来说都是无缝的。发生了一堆重定向,但用户无需输入凭据即可到达应用程序。
因此,对您的问题的简短回答是,您的外部应用程序需要支持 SAML SSO 并且需要向身份提供商注册,在这种情况下,他们可以只使用 IdP 对用户进行身份验证并签署它可能拥有的声明.