4

我们应用程序的租户有自己的子域,例如 customer1.domain.com,尽管它是一个代码库。一些租户希望 SP 使用 SAML 发起 SSO。

实现这一目标的最佳方法是什么?

  1. 静态共享子域上的 SimpleSAMLphp,例如 sso.domain.com/saml/
  2. SimpleSAMLphp 作为租户的一部分,例如 customer1.domain.com/saml/

如果我们选择选项 1,我们如何知道传入的 SAML 请求是针对哪个租户的?

如果我们选择选项 2,您会如何推荐为 metadata/authsources 配置 SimpleSAMLphp,因为它似乎只支持硬编码文件。

谢谢

4

2 回答 2

0

我们最终选择了选项 2,它运行良好。SimpleSAMLphp 安装在多租户应用程序中,格式为:customer1.domain.com/saml/

在 SimpleSAMLphp 中,authsources.php 配置如下:

$_SERVER['HTTP_HOST'] => array(
    'saml:SP',
    'entityID' => 'https://'.$_SERVER['HTTP_HOST'],
    ...etc

这意味着每个租户都有一个唯一的 entityID,以他们的域名形式提供给我们,例如https://customer1.domain.com

在执行 SP 发起的 SSO 时,我们指定特定于此租户的 IdP,否则他们会看到发现页面和来自其他租户的所有 IdP 的列表:

if (!$as->isAuthenticated()) {
    $params = array(
        'saml:idp' => $samlEntityID
    );
    $as->login($params);
}

到目前为止,它可以非常顺利地处理存储在数据库中的元数据。

于 2015-09-09T08:32:50.267 回答
0

在我的一位前雇主那里,我们有一个类似于选项 2 的设置,它对我们来说效果很好。唯一的区别是每个客户端的域都是唯一的,他们将 SAML 发布到 /index.php

客户 1

client1.com/index.php

客户2

client2.com/index.php

我们为每个客户端使用了一个侦听器来触发 SAML 有效负载的处理。

我们必须在 authsources.php 中为每个客户端配置密钥和源名称(每个客户端的源名称是唯一的)。我们还为每个客户端使用了不同的密钥,您也可以为所有客户端使用一个密钥对,但安全性较低

我们还必须在 saml20-idp-remote.php 中为每个客户端配置指纹。

于 2015-09-08T17:06:25.063 回答