我们的应用的租户拥有自己的子域名,例如customer1.domain.com,虽然它是一个代码库。一些租户希望SP使用SAML启动SSO。
实现这一目标的最佳方法是什么?
如果我们选择选项1,我们如何知道传入SAML请求的租户?
如果我们选择选项2,您会如何建议为元数据/ authsources配置SimpleSAMLphp,因为它似乎只支持硬编码文件。
由于
答案 0 :(得分:0)
在我的一位前雇主中,我们有类似于选项2的设置,它对我们来说效果很好。唯一的区别是域名对每个客户端都是唯一的,他们将SAML发布到/index.php
客户1
client1.com/index.php
客户端2
client2.com/index.php
我们为每个客户端使用了一个侦听器来触发SAML有效负载的处理。
我们必须在authsources.php中为每个客户端配置密钥和源名称(源名称对于每个客户端是唯一的)。我们还为每个客户端使用了不同的密钥,您也可以为所有客户端使用一个密钥对,但安全性较低
我们还必须在每个客户端的saml20-idp-remote.php中配置指纹。
答案 1 :(得分:0)
我们最终选择了选项2并且运行良好。 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);
}
到目前为止,它可以非常顺利地存储在数据库中的元数据。