实现SAML 2.0不同idp的单点登录


Implement SAML 2.0 SSO different Idps

我的网站被多家公司使用。这些公司希望实现SSO。所以他们登录到他们公司的门户网站,点击一个链接到我的网站。他们不用登录就能进入我的网站主页。我的网站是在php。不同的公司可以用任何语言建立他们的网站。我们希望这是尽可能普遍的,以便所有公司都可以使用它。它也需要安全,原因很明显,也因为我们是一家有phi的健康公司。

我读了很多关于simpleSAMLphp的文章,但是我不确定我对如何实现这个是否正确。

我是否只是将我的网站设置为使用simpleSAML的SP,并对其他公司说"这就是我使用的,让自己成为Idp并向我发送正确的数据"?有没有别的办法呢?

好吧,如果您想提供一个好的服务,我猜您必须支持多个SSO协议,并让客户端选择。除了SAML之外,还有OAuth、OpenID Connect和JWT,我认为它们相对简单且被很好地采用。我发现JWT特别简单易用。

关于SAML PHP实现,我已经尝试过simpleSAML,但事实证明它太复杂了,无法将其集成到现有的应用程序中。我更喜欢lightSAML库,这实际上是aerialship/lightSAML的v2,特别是因为我的应用程序是在Symfony和lightSAML有一个安全包。

差不多。

你把你的SP元数据发给公司,他们导入它,然后他们把他们的IDP元数据发给你,你导入它。

关键在于"主键",即另一个系统中的用户如何匹配您系统中的用户。NameID通常用于此,它可以有多种格式。

同样,这些都在元数据中。

作为SAML集成中的服务提供者(SP)的另一个非常有用的部分是拥有IdP发现服务。由于您的每个合作伙伴都将与您的组织交换元数据,因此每个合作伙伴本质上都是一个点对点的SAML连接。IdP发现服务使用请求中的某些内容来标识合作伙伴并调用SAML sp发起的SSO事务。常见的策略之一是使用URL命名,如yourpartner.company.com。然后IdP发现服务检测URL中的子域"yourpartner",然后调用适当的SP事务。还有其他策略,但我发现这个策略对大多数组织最有效。