现有帐户和服务提供商之间的 SAML

SAML between existing account and service provider

背景: 我有一个带有用户名(电子邮件)和密码的基本用户数据库。用户可以使用这些凭据登录到我的网站。他们从网站上获得 link 到他们有权访问的不同服务,但具有不同的 username/passwords。所以他们单击 link "Open My Service X" 并且他们必须使用他们的服务唯一登录凭据登录。我确实有用户服务登录用户名。所以我可以映射 local-user <=> service-user.

我想在支持 SAML 的服务 X 和我的网站之间进行单点登录。

Question/Problem: 我希望用户在我的数据库中使用他们的 user/password 登录,然后单点登录服务 X,其中服务 X 支持 SAML。我不希望用户能够使用服务 X 中的 SAML 支持在我的网站上注册一个新的用户帐户。用户必须已经在我的数据库中拥有一个帐户。

所以我的问题可能比较模糊,但我很难理解如何实现这一点?

我正在考虑让我的 webapp 成为 SAML 身份提供者,以便将 SSO 请求传输回我的 webapp 并为他们的服务用户进行验证。那是正确的方法吗?

您的 SAML IdP 走在正确的轨道上。基本上涉及三个部分。您的电子邮件数据库(身份)、您现有的应用程序前端和支持 SAML 的远程服务。最近通常是SAML2

要在您的应用程序组合(您自己的应用程序和远程服务)中获得单点登录 (SSO),您可以安装 IdP 类似 Shibboleth IdP 并转换您的应用程序使用它而不是使用 email/password 登录。这将需要大量工作,因为您必须将您的应用程序转换为 SAML SP,就像远程服务一样。

一种更简单的方法可能是仅将 IdP 用于远程服务的 SAML,并让 IdP 识别您的用户已经使用他们的 email/password 登录。曲奇饼?因此,IdP 永远不应显示登录页面,因为它会识别您应用程序的 cookie 并将其与数据库中的用户相匹配。然后,它会根据该用户的信息向远程服务发布 SAML 属性。这也涵盖了您不允许通过 SAML 从远程服务创建帐户的用例。

这意味着您最终可能会得到以下 URL:

您的用户正常使用第一个 URL 登录,远程服务使用第二个 URL。这样,您的应用程序 cookie 将对 /idp 端点可见,但您需要编写代码以将其与数据库中的用户相匹配。