【问题标题】:Spring SAML credentials and platform accountsSpring SAML 凭证和平台帐户
【发布时间】:2014-06-13 17:54:07
【问题描述】:

我能够使用 @ImportResource 注释集成 Spring Boot 和 Spring Security SAML。

现在,我想继续:

  1. 用户选择 IdP [DONE]。
  2. 它执行登录(成功)[DONE]。
  3. SP 获取用户数据(通过解析 SAMLCredential 对象)[DONE]。
  4. webapp 必须检查通过 SAML 检索到的用户 ID(例如电子邮件)是否存在于我自己的数据库中。
  5. a) 如果是,webapp 从数据库中读取角色并设置相关权限。
    b) 如果不是,webapp 必须执行重定向到注册页面,以便将用户插入系统。

通过使用 UserDetailsS​​ervice 实现来执行第 4 点和第 5 点有意义,还是让我设置定义身份验证提供程序、过滤器等的安全上下文?

【问题讨论】:

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


    【解决方案1】:

    您应该实现 org.springframework.security.saml.userdetails.SAMLUserDetailsS​​ervice 并将其插入 samlAuthenticationProvider bean。如果用户不存在,您应该抛出 UsernameNotFoundException 异常,否则只需从您的数据库中填充并返回数据。

    除此之外,您应该实现自己的 org.springframework.security.web.authentication.AuthenticationFailureHandler 并将其插入 samlWebSSOProcessingFilter bean。此实现将通过作为参数发送的 UsernameNotFoundException 调用,然后您可以将用户重定向到正确的注册页面作为对其的反应。

    【讨论】:

    • 不客气 V。如果您对答案感到满意,请点击答案旁边的复选标记以将其从空心切换为绿色。
    • 有没有办法将 nameID(来自 SAMLCredential 对象)传递给失败处理程序,以便设置重定向页面的模型属性?
    • UsernameNotFoundException 有一个带有“extraInformation”字段的构造函数。只需将其放在那里并在您的 failureHandler 中从异常中加载一次。
    • 好的,它可以工作,但我看到这个构造函数已被弃用。您是否知道根据 Spring 最佳实践是否有正确的方法来执行此段落?
    • 正如它在异常的文档中所说:“如果您确实需要其他信息,请使用异常消息或使用自定义异常”,换句话说,您可以使用自己的扩展 UsernameNotFoundException 允许您存储NameID 并扔掉它。
    猜你喜欢
    • 2016-12-15
    • 2017-08-02
    • 2017-03-13
    • 2013-12-28
    • 2016-12-02
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2015-05-30
    相关资源
    最近更新 更多