首页 > 解决方案 > 将 SSO 与具有本机身份验证的应用程序集成

问题描述

我的任务是为现有应用程序集成单点登录,所以我一直在做几个演示。第一个是 Spring Security 的标准演示,我得到了它的工作。现在我正在尝试做一个概念验证演示,我在其中创建了一个只有两个屏幕的应用程序的玩具版本:一个用于登录,一个用于显示有关登录用户的一些信息。我想将 SSO 与此应用程序集成,以便用户有两种方式进行身份验证:直接在登录屏幕中输入凭据或通过 SSO SAML 请求...

因此,我将标准 SSO 演示中的 SAML 库和配置复制到我的概念验证应用程序中,我似乎让 SSO 工作,虽然有点太好了,因为我不再能够进入我的登录屏幕,即,我仍然希望这是输入应用程序基本 URL 的人的默认行为。我如何配置我的应用程序来实现这一点?

标签: spring-mvcspring-securityintegrationsaml

解决方案


我解决问题的方法是更改​​ Spring Security 配置,以便不再使用泛型/**来要求对应用程序的大多数页面进行 SSO 身份验证,现在它只需要对单个 HTML 页面sso.htm进行此类身份验证。这个“页面”实际上被应用程序转换为对控制器的请求,控制器处理 SSO 请求的特定于应用程序的处理。应用程序的初始页面redirect.jsp现在包含一些逻辑,可以根据用户是否直接到达该页面(即,通过输入应用程序的默认 URL)来选择应该将用户重定向到哪个页面或通过来自受信任的身份提供者的 SAML 消息。

注意:为此,不能在 Spring Security 配置中将初始页面指定为安全页面或不安全页面。如果它是安全的,那么这个页面只能在 SSO 身份验证后访问,因此用户将无法进行非 SSO 登录。如果不安全,则无法从该页面访问安全上下文,因此页面逻辑将无法确定相关用户是否具有 SAML 凭据,并且永远无法满足应用程序的 SSO 身份验证请求。

一旦通过在登录屏幕中输入的凭据或通过 SSO 请求对用户进行身份验证,从那时起,应用程序继续对该用户进行身份验证以查看其页面是相同的,即不再进行 SSO 身份验证。但是,当用户从应用程序注销(或由于会话超时而注销)时,将进行检查以查看是否为此用户完成了 SSO 身份验证。如果是这样,那么除了从应用程序注销之外,还为用户完成本地 SSO 注销,即应用程序的 SSO 身份验证会话被终止,但用户仍然使用他或她的身份提供者登录。因此,这样的用户可以直接通过应用程序重新登录到有问题的应用程序'

希望这对其他人有帮助...


推荐阅读