【问题标题】:Spring Security: Different authentication methods depending on entitySpring Security:根据实体不同的身份验证方法
【发布时间】:2014-12-20 07:18:32
【问题描述】:

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

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

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

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

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

亲切的问候,

亚历克斯

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    • 在未提供用户名的情况下将用户重定向到主登录页面
    • 在提供用户名后显示带有用户名/密码的登录页面或重定向到正确的 IDP

    【讨论】:

    • 这绝对是我们将使用的方法,ajax 部分是解决它的好方法,非常感谢。
    • @Vladimír Schäfer 我也在尝试实现同样的目标,但我需要另外一种身份验证机制,即 OAuth Token 进行身份验证。但我无法在我的 spring-security.xml 文件中声明多个 标记。所以我的问题是如何声明多个 url 模式来映射登录机制。
    • @ManojP,如果您仍在寻找解决方案,请检查 spring-security-saml 示例应用程序中的 securityContext.xml。
    • 我们的主要用户体验设计希望从我们的应用程序 (SP) 中为所有用户(本地和联合)提供一个登录/密码页面。是否可以通过 spring security saml 扩展来实现这一点?
    • 查看repo中的历史记录,之前是统一的。
    猜你喜欢
    • 2014-12-04
    • 2013-02-04
    • 2012-07-05
    • 1970-01-01
    • 2022-01-15
    • 2014-02-26
    • 2011-11-14
    • 2014-02-01
    • 2016-06-18
    相关资源
    最近更新 更多