如何在 java 或 node 中为 SAML 创建自己的 IDP

Posted

技术标签:

【中文标题】如何在 java 或 node 中为 SAML 创建自己的 IDP【英文标题】:how to create own IDP for SAML in java or node 【发布时间】:2019-10-28 07:00:36 【问题描述】:

我想创建一个可供多个应用程序使用的 SSO,最好的方法是什么。我正在浏览 SAML2.0,但我很困惑,因为我没有找到任何文章来创建自己的/自定义 SAML IDP。

1.创建自己的IDP有多可行。 2.实现SSO的最佳方式是什么

【问题讨论】:

有多种实现可用并准备好集成到您自己的代码中。但是,SO 不欢迎寻求库/框架指导的问题。 另外,考虑 OpenIDConnect 而不是 SAML2。它更容易实现 【参考方案1】:

不要尝试自己动手 - 使用受支持的解决方案。

在客户端,您需要一个SAML stack。

其中一些带有您可以安装的 IDP。

看看:

Shibboleth Azure AD - 云中的 SAML IDP SaaS 例如Auth0,Okta - 云中的 SAML IDP 带有 SAML 插件的 identityserver4 ComponentSpace - 有客户端和服务器端 Sustainsys - 有客户端和服务器端

所有这些都将提供 SAML IDP。

它们还提供了良好的文档来帮助您启动和运行。

【讨论】:

【参考方案2】:

问题 1:创建自己的 IDP 有多可行?

答案:GitHub 存储库中的How to build and run Shibboleth SAML IdP and SP using Docker container 提供了有关使用 Shibboleth SAML IdP 和 OpenLDAP 在 Java 中为 SAML 构建您自己的 IDP 的说明。

Shibboleth SAML IdP 负责身份联合。

OpenLDAP 负责身份验证。

问题 2:实施 SSO 的最佳方式是什么?

回答: Shibboleth IdP 已为已与 SAML SP 集成的企业应用程序实施 SSO。

(I) 我已经验证了由 Docker 运行的 Shibboleth SAML IdP(身份提供者)和 OpenLDAP 为以下企业应用程序提供的 SAML 单点登录 (SSO)。换句话说,我利用 Docker 运行的 Shibboleth SAML IdP 和 OpenLDAP 成功登录到以下企业应用程序。

Microsoft Office 365
Google G Suite
Salesforce
Dropbox
Box
Amazon AWS
OpenStack
Citrix NetScaler
VMware vCloud Director
Oracle NetSuite

(II) 我们使用 Java 开发了以前版本的 Zero-Password Authentication and Authorization System,并利用 Shibboleth IdP 为企业应用程序提供 SAML SSO。

我们在 Scala 中开发了具有可扩展性和高可用性的 Zero-Password Authentication and Authorization System 当前版本,以便在没有 Shibboleth IdP 的情况下为企业应用程序本地提供 SAML SSO。

为了在您的生产环境中快速部署 SAML IdP,强烈建议利用第三方 SAML IdP(例如 Shibboleth IdP)。这样您就有足够的时间用 Java 或其他编程语言开发自己的 SAML IdP。

(III) *** 的另一个问题"How to implement or integrate single sign on with SAML and Shibboleth" 提供了有价值的信息和讨论。

【讨论】:

【参考方案3】:

问题 1:创建自己的 IDP 是否可行?

是的,这是可能的,但需要付出很多努力。

此存储库可以帮助您弄清楚如何构建自己的 IDP:A mock IDP and SP using the OpenSAML library

此存储库可以帮助您将自己的 IDP 集成到 Spring Boot 应用程序:Spring Boot, SAML, and Okta

问题 2:实施 SSO 的最佳方式是什么?

在我看来,实施 SSO 的最佳方式是使用现收现付身份服务。它可以帮助您节省精力和金钱。 Amazon、Google、Apple、Okta、Auth0、geetoPod 等有很多这样的服务。

【讨论】:

以上是关于如何在 java 或 node 中为 SAML 创建自己的 IDP的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 创建“HTTP 重定向绑定”SAML 请求

带有标准 java 应用程序的 Spring Security SAML

使用 Angular、node.js 和身份提供者的 SAML 身份验证

如何在 Node JS 中为 ActiveMQ 编写发送方应用程序

使用 Node.js 和 SPA 进行 SAML2.0 身份验证

Spring SAML:如何将请求的 URL 作为 RELAY_STATE 推送到 SAML?