Использование SimpleSAMLphp в мультитенантном приложении

Арендаторы нашего приложения имеют свой собственный поддомен, например, customer1.domain.com, хотя это одна кодовая база. Некоторые арендаторы хотят, чтобы SP инициировал SSO с SAML.

Какой лучший способ сделать это?

  1. SimpleSAMLphp в статическом общем поддомене, например sso.domain.com/saml/
  2. SimpleSAMLphp как часть арендатора, например customer1.domain.com/saml/

Если мы перейдем к варианту 1, как мы узнаем, для какого арендатора поступает входящий запрос SAML?

Если мы перейдем к варианту 2, как бы вы порекомендовали настроить SimpleSAMLphp для метаданных / источников аутентификации, поскольку кажется, что он поддерживает только жестко закодированные файлы.

Спасибо

4

Решение

У одного из моих бывших работодателей у нас была установка, подобная варианту 2, и она хорошо сработала для нас. Единственная разница в том, что домен был уникальным для каждого клиента, и они разместили SAML в /index.php

клиент 1

client1.com/index.php

client2

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

При выполнении SSO, инициированного SP, мы указываем IdP, специфичный для этого арендатора, в противном случае они увидят страницу обнаружения и список всех IdP от других арендаторов:

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

Пока что он работает очень хорошо с метаданными, хранящимися в базе данных.

0

По вопросам рекламы [email protected]