Spring 支持SAML SSO和正常登录

Spring 支持SAML SSO和正常登录,spring,single-sign-on,saml,Spring,Single Sign On,Saml,我有一个由两种类型的用户访问的应用程序,即内部用户和外部用户。 我需要使用SAML对外部用户进行身份验证。 我需要使用基于正常表单的登录对内部用户进行身份验证。我的应用程序需要支持这两种类型的用户。我使用spring安全框架 是否可以同时支持这两种类型的用户?如果是的话,你能在高层提出建议吗?谢谢。您可以通过类似以下配置轻松启用对表单和SAML身份验证的支持: <http entry-point-ref="authenticationEntryPoint" authentication-m

我有一个由两种类型的用户访问的应用程序,即内部用户和外部用户。 我需要使用SAML对外部用户进行身份验证。
我需要使用基于正常表单的登录对内部用户进行身份验证。我的应用程序需要支持这两种类型的用户。我使用spring安全框架


是否可以同时支持这两种类型的用户?如果是的话,你能在高层提出建议吗?谢谢。

您可以通过类似以下配置轻松启用对表单和SAML身份验证的支持:

<http entry-point-ref="authenticationEntryPoint" authentication-manager-ref="authenticationManager">
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_FULLY"/>
    <form-login login-page="/login" />
    <custom-filter before="FIRST" ref="metadataGeneratorFilter"/>
    <custom-filter after="BASIC_AUTH_FILTER" ref="samlFilter"/>
</http>

确保AuthenticationManager包含samlAuthenticationProvider。当然,还包括Spring SAML示例应用程序中的其他配置部分

然后,您可以创建自定义登录页面,该页面向用户显示用于基于表单的身份验证的用户名+密码字段,以及用于初始化IDP身份验证的链接/图片(或多个链接/图片)(通过将用户重定向到scheme://host:port/saml/login?idp=selectedIdpEntityId)

然后,您的用户决定使用哪一个,这取决于他们是内部用户还是外部用户


Spring SAML文档中涉及此主题的部分在第章中。

是的,可以同时支持这两个主题。我相信文档中已经详细介绍了。谢谢您的回复。如果您能建议包含此内容的特定URL/链接,这将非常有帮助。只要用户尚未通过身份验证,应用程序如何知道用户是内部用户还是外部用户?IMHO只有在两次部署同一个应用程序或使用不同筛选器链部署不同的URI时,才能实现这一点。我计划使用/ext/作为URI的一部分来标识只调用我的应用程序公开的服务的一小部分的外部用户。带有/ext/的URI应该通过SAML身份验证。所有其他URL都被视为普通内部用户,并通过基于表单的登录银行进行回复。应用程序必须透明地处理用户的身份验证。外部用户通过SAML身份验证处理(通过查看URI,例如使用/myapp/ext/service1)。如果URI为/myapp/service1,则如果有效会话不存在,则会向用户显示正常登录屏幕。在这种情况下,请实现一个自定义AuthenticationEntryPoint,用于确定用户类型,并重定向到表单登录页面,或启动SAML身份验证。您的实现将从“entry point ref”属性中引用。只需添加到Vladimir的答案中,有一个名为“DelegatingAuthenticationEntryPoint”的spring安全类,用于根据RequestMatchers选择不同的authenticationEntryPoints