我们已经将SimpleSAMLphp设置为SAML IDP,并向其注册了2个SP(Liferay和MyWebMethods)。
每个SP都通过simplesamlphp / metadata / saml20-sp-remote.php文件中的ACS和SLO链接注册到IDP。像:
// 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,然后可以再次进入第二个SP,而无需再次登录。
我的问题是,当用户从同一会话同时连接到2个SP中的每一个时,注销(SLO)(Google Chrome中的2个标签)。如果他首先从SP2注销,则每当他尝试从SP1注销时,都会被重定向到SP2的登录屏幕(即,正常的SSO外登录屏幕),而不是被重定向到IDP登录屏幕。 。
注销URL实际上是由我们的SP过滤器捕获的,然后我们创建一个执行logout()的saml Auth对象:
Auth auth = new Auth(request, response);
String relayState = sp1_login_url;
auth.logout(relayState);
一个信息是SP1支持SP发起,而SP2仅支持IDP发起。
请问有什么主意吗?