Мы настроили SimpleSAML php в качестве SAMP IDP, для которого зарегистрированы 2 SP (Liferay и MyWebMethods).
Каждый SP зарегистрирован в IDP со своими собственными ссылками ACS и SLO в simplesamlphp /metadata/saml20-sp-remote.php файл. Что-то вроде:
// MWS = SP2
$metadata['http://sp2.siteweb.com'] = array(
'AssertionConsumerService' => 'http://sp2.siteweb.com/',
'SingleLogoutService' => 'http://sp2.siteweb.com/?method=logout',
);
// LR = SP1
$metadata['http://sp1.siteweb.com/c/portal/saml/metadata'] = array(
'AssertionConsumerService' => 'http://sp1.siteweb.com/c/portal/saml/acs',
'SingleLogoutService' => 'http://sp1.siteweb.com/c/portal/saml/sls',
);
У меня нет проблем с использованием SSO: после аутентификации (через IDP) я могу добраться до первого SP, затем я могу go на 2 SP без необходимости войдите снова.
Моя проблема связана с выходом из системы (SLO), когда пользователь подключается к каждому из 2 SP одновременно в одном сеансе (2 вкладки в Google Chrome). Если он сначала выходит из системы с помощью SP2, то всякий раз, когда он пытается выйти из системы с SP1, он перенаправляется на экран входа в систему SP2 (ie: обычный экран входа вне SSO), а не перенаправляется в IDP. экран входа в систему.
URL-адрес выхода фактически захватывается нашим фильтром SP, затем мы создаем объект аутентификации saml, который выполняет logout ():
Auth auth = new Auth(request, response);
String relayState = sp1_login_url;
auth.logout(relayState);
Одна информация заключается в том, что SP1 поддерживает SP -inidiated и SP2 поддерживает только IDP-init.
Любая идея, пожалуйста?