Spring Security:取决于实体的不同身份验证方法

时间:2014-10-24 12:43:42

标签: java spring-mvc spring-security spring-saml

首先发帖,希望我做得对。

在一个项目中,我们有一个场景,我们有一个包含多个实体的Web应用程序。目前,登录是通过默认的JDBC Spring Security提供程序进行管理的,工作正常。

对于新的需求,我们需要每个实体都有自己的登录方法(目前有两种方法可用,JDBC方法是当前方法,第二种方法是通过SAML进行身份验证,每个实体都有定义自己的IdP,但这是另一个故事)

我需要一些关于如何实现这一目标的指导,我已经做了一些搜索,我找到了不同网址等的提供商......但是对于同一个应用和网址没有不同的登录方法。 s取决于用户类型或实体。

有一个自定义单一入口点的好方法,我们可以检查实体用户,然后使用合适的身份验证提供程序吗?

亲切的问候,

亚历

1 个答案:

答案 0 :(得分:3)

由于您的每个用户可能使用不同的IDP,因此在继续初始化身份验证过程之前,您将需要确定用户名 - 但您已经知道了这一点。

采取的一种方法(类似于Microsoft与企业用户使用Office 365的方法):

  • 显示包含标准用户名+密码
  • 字段的登录页面
  • 一旦用户输入用户名并模糊输入字段,您就会进行AJAX调用(为此目的制作自定义API)并获取有关此用户使用的身份验证类型+ IDP的信息
  • 如果类型是密码,您只需让用户继续填写密码字段并POST到您习惯使用JDBC提供程序处理的相同位置
  • 如果类型是联合身份验证,则通过重定向到/ saml / login?idp = xyz并继续SAML流程来使用正确的IDP初始化身份验证

一旦用户输入用户名,或者让用户点击“继续”按钮,就可以通过提交表单来避免任何API。然后使用自定义EntryPoint是有意义的:

  • 如果用户未提供用户名
  • ,则会将用户重定向到主登录页面
  • 显示带有用户名/密码的登录页面,或者在提供用户名后重定向到正确的IDP