构建 SAML IDP

Posted

技术标签:

【中文标题】构建 SAML IDP【英文标题】:Building a SAML IDP 【发布时间】:2020-07-10 15:24:08 【问题描述】:

我们正计划建立自己的 SAML IDP。我有几个问题:

    构建一个有意义吗? 如果是,方法是什么?我没有看到任何用于 SAML 的 Java 库。不能使用 spring-security-saml,因为它支持集成第三方 IDP,而不是构建一个。

【问题讨论】:

1.除非您有一些非常特殊的、异国情调的要求,否则答案是否定的,绝对没有。 【参考方案1】:

有一个 SAML IDP here 的列表。

有一个 SAML 堆栈列表here。

要添加@codebrane 答案,您是否计划同时支持 SP 和 IDP 发起?

但总的来说,不要。使用现成的产品或至少使用可靠的 SAML 堆栈库。

【讨论】:

【参考方案2】:

作为一个从零开始构建SAML IdP 的人来说,用Java 构建一个主要涉及以下内容:

    侦听 SAML 请求的服务器应用程序,通常在端口 443 上。您可以为此使用 spring-boot。 向 IdP 管理的用户提供身份验证页面的服务器代码。 LDAP 是一种常用的用户身份验证方式。 用于为已验证用户提取属性的服务器代码。这可能是一个 LDAP 查找,以查找名字、姓氏、电子邮件等属性。 服务器代码决定哪些属性可以发布给请求的 SP。为此,您可以使用 SP 的 entityID。 用于将用户属性(例如从 LDAP)转换为 SAML 属性并发送到 SP 的服务器代码。

1 和 4 需要解析和创建 SAML。你可以使用openSAML 来处理这些。 5 需要一个SAML 属性模式,SP 可能会理解。您可以为此使用eduPerson。

使用 SAML 和 SP 需要了解和实施各种 SAML 配置文件。 Web 浏览器 SSO 是一种使用频率很高的方法。您可以阅读有关个人资料here。

一旦您了解了SAML 及其在流程中的位置,您需要了解/实施XMLSignature 以及使用PKI 的各种加密主题。

一旦您有了一个有效且经过测试的 IdP 实施,您就需要能够解析 SAML Metadata (PDF) 以使用其公钥证书和元数据中的各种其他 URL 来验证 SP。您还需要使 SP 元数据保持最新,并创建 IdP 元数据以发送到 SP,以便它可以验证您将签署的 SAML Response

如果投资回报率不值得这么多的开发,您可以使用'standard' IdP。

【讨论】:

以上是关于构建 SAML IDP的主要内容,如果未能解决你的问题,请参考以下文章

单点登录中的依赖关系

配置 saml-sample (SP) 以使用 Okta (IdP)

我们是不是需要 IDP 发起的 SSO (SAML) 中的 Keystore/JKSKeyManager?

SAML SP:信任 IdP 的证书

Spring security SAML IDP 发起的 SSO

我是不是应该要求 IdP 签署 SAML2 SSO 响应?