在多租户应用中使用SimpleSAMLphp

5
我们的应用程序租户有自己的子域名,例如customer1.domain.com,尽管它是一个代码库。一些租户想要使用SAML进行SP启动SSO。
最佳方案是什么?
1.在静态共享子域上使用SimpleSAMLphp,例如sso.domain.com/saml/。 2.SimpleSAMLphp作为租户的一部分,例如customer1.domain.com/saml/。
如果我们选择选项1,我们如何知道传入的SAML请求是为哪个租户而来的?
如果我们选择选项2,您会建议如何配置元数据/authsources的SimpleSAMLphp,因为它似乎只支持硬编码文件。
谢谢
2个回答

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

client1.com/index.php

客户端2

client2.com/index.php

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

我们需要在authsources.php中为每个客户端配置密钥和源名称(源名称对于每个客户端都是唯一的)。我们还为每个客户端使用不同的密钥,您也可以为所有客户端使用一对密钥,但这样安全性会降低。

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


0
我们最终选择了第二个选项,现在已经运行良好。SimpleSAMLphp已安装在多租户应用程序中,形式为:customer1.domain.com/saml/。
在SimpleSAMLphp中,authsources.php 配置如下:
$_SERVER['HTTP_HOST'] => array(
    'saml:SP',
    'entityID' => 'https://'.$_SERVER['HTTP_HOST'],
    ...etc

这意味着每个租户在我们这里都有一个唯一的实体ID,以他们的域名形式表示,例如https://customer1.domain.com

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

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

目前在数据库中存储元数据,一切都非常顺利。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接