将 SSO 与具有本机身份验证的应用程序集成

Integrating SSO with an Application with Native Authentication

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

所以我将标准 SSO 演示中的 SAML 库和配置复制到我的概念验证应用程序中,我似乎可以使用 SSO,尽管有点太好了,因为我不再能够进入我的登录屏幕,也就是说,我仍然希望这是进入应用程序基础 URL 的人的默认行为。我必须如何配置我的应用程序才能实现此目的?

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

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

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

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