3

第一次在这里发帖,希望我做得对。

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

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

我需要一些关于如何实现这一点的指导方针,我已经进行了一些搜索,并且我找到了不同 URL 的提供者等......但对于相同的应用程序和 url,根据用户类型或实体,没有不同的登录方法。

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

亲切的问候,

亚历克斯

4

1 回答 1

3

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

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

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

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

  • 如果未提供用户名,则将用户重定向到主登录页面
  • 提供用户名后,显示带有用户名/密码的登录页面或重定向到正确的 IDP
于 2014-10-24T18:12:40.643 回答