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

先发帖在这里,希望我做得对。

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

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

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

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

亲切的问候,

亚历克斯

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

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

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

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

  • 将用户重定向到主登录页面,以防它没有提供用户名
  • 一旦提供了用户名,就会显示带有用户名/密码的登录页面或重定向到正确的IDP