2013-02-18 72 views
2

让我们假设我们有一个用户正在使用Single sign-on访问三种不同的服务。 在点击注销时,可以识别和终止当前Sp的会话。使用SAML在单次注销中终止会话

在此,IdP有责任将用户从其他两项服​​务中注销。 我的问题是如何获得和终止其余两项服务的会话?

回答

7

Idp向其他两个SP发送LogoutRequest和要注销的用户的sessionIndex。 SP然后负责终止会议。

+0

但是,此会话索引必须在SSO时给予IdP,并且将为每个(SP +用户)组合保留一个数据库。有没有更具扩展性的方法? – Shurmajee 2013-02-18 08:44:22

+3

会议索引在登录时从IDP提供给SP。在SLO中,SP发送用户的会话索引。据我所知,SP需要跟踪每个用户的(SAML会话索引,Java会话)。而且IDP需要跟踪每个SP的uid和会话索引。据我所知,没有其他办法。 – 2013-02-18 09:06:59

+0

@Shurmajee - 出于好奇,你怎么没有接受这个答案?我与SAML作战,这个答案证明是有用的,因为它帮助我轻松实现SLO。 – Mjh 2016-03-02 14:48:30

2

在SSO期间,IDP将SAML断言发送到包含AuthnStatement的SP。此AuthnStatement的属性之一是SessionIndex,它用IDP标识用户的会话。

在SLO期间,SP发送包含SessionIndex的SAML注销请求,该请求标识IDP必须终止的用户会话(IDP)。然后,IDP检索参与当前用户会话的SP列表。 IDP向这些SP中的每一个发送SAML注销请求。

为了做到这一点,IDP需要跟踪参与当前用户会话的SP(即在当前用户会话期间接收到由IDP发出的SAML声明的SP)。

+0

正确,但用户有多个活动sessions.and注销应该终止所有sessions.stefans答案的窍门,但我想知道是否有更好的方式可能 – Shurmajee 2013-03-10 15:29:48