构建 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?