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

时间:2017-12-13 14:59:18

标签: authentication saml saml-2.0

背景 我有一个基本的用户数据库,用户名(电子邮件)和密码。用户可以使用这些凭据登录我的网站。从网站上,他们可以获得他们有权访问的不同服务的链接,但使用不同的用户名/密码。因此,他们点击“打开我的服务X”链接,他们必须使用他们的服务唯一登录凭据登录。我确实有用户服务login-username。所以我可以映射local-user< =>服务用户。

我想在支持SAML的服务X和我的网站之间使用SSO。

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

所以我的问题可能比较模糊,但我很难掌握如何实现这一目标?

我正在考虑让我的webapp成为SAML身份提供商,以便将SSO请求转移回我的webapp并为其服务用户进行验证。这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

您与SAML IdP一起走在正确的轨道上。基本上涉及三个部分。您的电子邮件数据库(标识),现有应用程序前端和支持SAML的远程服务。这些天通常是SAML2

要在您的应用程序组合(您自己的应用程序和远程服务)中获得单点登录(SSO),您可以像Shibboleth IdP一样安装IdP并转换您的应用使用它而不是使用电子邮件/密码登录。这需要相当多的工作,因为您必须将您的应用转换为SAML SP,就像远程服务一样。

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

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

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