2015-05-20 32 views
4

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

实现此目的的最佳方法是什么?

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

如果我们选择1,我们将如何知道传入SAML请求的租户是什么?

如果我们去选择2,你会如何建议配置SimpleSAMLphp的元数据/ authsources,因为它似乎只支持硬编码的文件。

感谢

回答

0

在我的前雇主之一,我们也有类似的选项2的设置和它的工作很适合我们。作为域名的唯一区别是为每个客户独特的,他们张贴的SAML到的index.php

客户端1

client1.com/index.php

客户端2

client2.com /index.php

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

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

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

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); 
} 

到目前为止,它的工作存储在数据库中的元数据非常流畅。