如何从头开始创建使用 API 进行身份验证的 SAML IDP

How to create a SAML IDP that authenticates with an API from scratch

现在我正忙于一个项目,我们想用 Node 创建一个 SAML IDP。

问题: 我们有一个实现 API REST 的系统,这个 API 对用户进行身份验证,它的响应包含经过身份验证的用户的信息……就像 API 响应(与 SAML 无关)。 重点是在 SAML IDP 系统中聚合来自 API 的响应,其中一些 SAML 请求 (XML) 来自服务提供商。 SAML IDP 系统在内部查询 API,获取身份验证信息,并作为 SAML 响应 (XML) 响应服务提供商。 我一直在为这个问题寻找简单的解决方案,比如 Okta、OneLogin,但问题是那些公司对用户进行身份验证,而在我的系统中进行身份验证的是 API,我无法更改它,因为该项目是定义为那个。

我的问题是:

我不是 SAML 方面的专家,所以如果您有关于创建 SAML IDP 的文档或任何帮助都会很有用。

感谢您的阅读,对不起我的英语。

Do you know about a system that provides SAML configurations but authenticates with an external API?

首先,您必须记住 SAML 是一种协议;它是服务提供者可以选择与身份提供者交谈的语言。验证用户凭据和验证用户身份的任务完全独立于协议。 SP 可以选择向 IdP 发送 SAML 身份验证请求,而 IdP 可以自由地以其认为合适的方式对用户进行身份验证。两者通常没有任何关系

其次,有很多 IdP 允许您:

  1. 打开 SAML2 功能,以便 IdP 可以使用 SAML2 协议。
  2. 使用自定义 REST API 验证用户凭据。 IdP 会联系您的 API 以验证它从用户那里收到的凭据,并最终生成一个 SAML2 响应返回给 SP。

此类 IdP 的一个示例是:https://github.com/apereo/cas. It allows you to have it act as a SAML2 IdP and supports a REST API 用于用户身份验证。

虽然它可能不会 100% 适合您的用例 OOTB,但它是一个很好的起点。您永远不应该从头开始并重新发明轮子。 “从头开始创建一个使用 API 进行身份验证的 SAML IDP”通常是要求终身惩罚的好方法。

PS 您的其他问题应该单独发布 posts/questions。