gpt4 book ai didi

spring-security - 在 Spring 中使用 SAML 扩展和 Shibboleth 进行单点登录

转载 作者:行者123 更新时间:2023-12-03 11:34:31 24 4
gpt4 key购买 nike

我想在基于 Spring 的应用程序中实现单点登录 (SSO) 身份验证层,目的是支持来自不同安全域的身份验证和授权。
我已选择 Shibboleth 作为 IdP,但我还没有确定我将为 SP 使用什么。

选择是:

  • Spring Security SAML 扩展:组件使新的和现有的应用程序都可以在基于 SAML 2.0 协议(protocol)的联合中充当服务提供者,并启用 Web 单点登录。 Spring Security Extension 允许在单个应用程序中无缝组合 SAML 2.0 和其他身份验证和联合机制。所有在身份提供者模式下支持 SAML 2.0 的产品(例如 ADFS 2.0、Shibboleth、OpenAM/OpenSSO、RM5 IdM 或 Ping Federate)都可用于连接 Spring Security SAML Extension。
  • Shibboleth (也称为 SP):Shibboleth 是一种基于 Web 的技术,它实现了 SAML 的 HTTP/POST、工件和属性推送配置文件,包括身份提供者 (IdP) 和服务提供者 (SP) 组件。

  • 所以,我有一些问题:
  • 就以下方面而言,直接使用 Spring SAML 作为 SP 是个好主意吗?
    可扩展性和可维护性?
  • 可以将外部 SP 与 Spring Security 一起使用吗?如何配置我的应用程序和/或我的应用程序服务器 (JBoss 8.0 - WildFly)?
  • 我在哪里定义角色(针对每个场景)?
  • 哪个是值得的选择?

  • 最好的问候,V。

    最佳答案

    两者的主要区别在于部署场景:

  • Shibboleth SP 插件直接部署到 Apache/IIS Web 服务器。
  • Spring SAML 嵌入在您的应用程序中。

  • 两者都有优点和缺点。

    1. Is it a good idea to use directly Spring SAML as SP in terms of scalability and maintainability?


    Spring SAML
  • 对如何执行身份验证以及身份验证过程如何与您的应用程序进行交互提供了很好的控制。你可以例如创建您自己的配置 UI 并动态添加 IDP,创建自定义登录屏幕作为应用程序的一部分,对错误处理具有完整且轻松的控制,轻松支持多个 IDP,动态配置 SSO 的详细信息(请求的 AuthnContext、NameID、绑定(bind)、身份验证强制)。
  • 轻松解析接收到的各种格式的 SAML 属性,支持同一应用程序中的多种身份验证方法。
  • 动态生成 SP 元数据,它提供有限的 Multi-Tenancy 并支持在所有其他选项中不可用的配置文件(例如,单点注销、 key 持有者、IDP 发现)。
  • 与 Spring Security 无缝交互,这带来了一系列自身的好处。使用 Spring SAML,您还可以直接在应用程序中配置完整的身份验证和授权策略(例如,哪些页面需要身份验证以及何时需要身份验证、基于角色的内容访问控制、动态条件下的身份验证升级……)。
  • 允许您在任何应用程序服务器或容器上以及任何反向代理或 Web 服务器后面部署应用程序,而不会影响功能。

  • Shibboleth 插件
  • 这些是静态配置的,通常通过 HTTP header 与您的应用程序交互。它们将身份验证逻辑与应用程序本身分离,因此您唯一需要注意的是接受 header 并使用正确的安全上下文初始化应用程序 session 。 protected 页面的定义存在于 IIS/Apache 服务器上并基于 URL 模式,这意味着身份验证和授权策略部分定义在您的应用程序之外。
  • 您需要确保只能通过 Web 服务器访问应用程序(= 禁止所有直接访问),因为这将允许伪造 header 。
  • 不需要对应用程序本身进行很多更改,因此通常可以轻松地与遗留系统一起使用。


    1. It is possible to use an external SP together with Spring Security? How have I to configure my application and/or my application sever (JBoss 8.0 - WildFly)?


    是的,这是可能的,但需要付出努力。你可以例如配置 WildFly 以设置加密格式的共享域 cookie,并在 Spring Security 配置中验证 cookie。

    1. Where do I define the roles (for each scenario)?


    使用 Spring SAML,您可以在处理 SAML 响应时定义角色,例如解析 SAML 属性。这是通过实现 SAMLUserDetailsService 来完成的。接口(interface)和插入 samlAuthenticationProvider .

    使用 Shibboleth,您可以将从 IDP 接收到的属性与 header 一起转发到您的应用程序,并在您的应用程序中解析它们。

    WildFly(可能)允许您直接在 SP 中定义安全上下文和角色,而无需在您的应用程序中进行配置。这样的配置可能不能跨应用服务器移植。

    1. Which is the worthwhile choice?


    所有选项都将使您能够使用 SAML 2.0 执行 WebSSO。人们通常根据他们的要求(例如定制需求)、环境(使用的 Web 服务器、应用程序服务器)、首选的开发方法(Java、.NET 等)、使用的框架、遗留代码进行选择。许多客户都使用 Spring SAML 和 Shibboleth 插件。

    关于spring-security - 在 Spring 中使用 SAML 扩展和 Shibboleth 进行单点登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22908548/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com