SP端单点登出(SLO)功能配置

CARSI联盟的特色之一是单点登录(SSO)功能。特别是在先访问CARSI资源目录(https://ds.carsi.edu.cn,本身是一个SP)、再访问其他资源SP的应用场景下。为了支持CARSI资源目录的单点登出功能,SP需要进行一定的功能配置,以确保用户在某SP的登录状态与用户在CARSI联盟中的状态保持一致,清除SP端无效数据,同时保证公共机房等环境下下一个用户使用同一浏览器登录同一SP时,不会复用前一用户的信息,避免信息泄露。

        根据SP接入CARSI所采用协议的不同,SP端单点登录功能配置可分成“被动级联登出(SAML)”和“被动级联登出(OAuth)”两种情况。

被动级联登出(SAML)

        只针对Shibboleth SP!采用SAML方式接入CARSI的SP,其登出过程包括两部分:1、登出Shibboleth SP;2、登出此SP对应的应用系统。

1、在SP /etc/shibboleth/shibboleth2.xml 文件中,配置支持登出功能

<Logout>SAML2 Local</Logout>

2、配置SP采用back-channel方式向受此SP保护的应用系统发送Logout通知

在/etc/shibboleth/shibboleth2.xml 文件中配置<Notify>,将其中的“https://{SP_Server_URL}/logout.php”修改成应用系统登出地址。

<ApplicationDefaults>

......

// back-channel请求是在SP进行logout后发起,所以Location地址需要填写非SP保护的目录

<Notify Channel="back" Location="https://{App_Server_URL}/logout.php" />

</ApplicationDefaults>

3、修改应用系统的登录功能,记录用户sessionID

应用系统在用户完成认证进入系统时记录Shibboleth SP的session ID,作为该用户的关联信息保存在应用系统中。以php为例,session ID获取方法如下:

$sessionID=$_SERVER['Shib-Session-ID'];

在SP“被动级联登出”时,应用系统会收到来自SP的同一 session ID 正在登出的消息,应用系统须清除系统中该用户相关信息,完成用户在应用系统的登出。

4、修改应用系统的登出功能,实现用户在应用系统的登出

应用系统的登出功能从SP的用户登出消息中解析出session ID,完成用户在应用系统的登出。以php为例,

$SP_LogoutNotification = file_get_contents("php://input");

//获取到的$SP_LogoutNotification 如下例所示

//<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
//  <s:Body>
//    <LogoutNotification xmlns="urn:mace:shibboleth:2.0:sp:notify" type="global">
//      <SessionID>
//        _d5628602323819f716fcee04103ad5ef
//      </SessionID>
//    </LogoutNotification>
//  </s:Body>
//</s:Envelope>  

 

//解析以上文本获得SessionID

......

 

//应用系统完成用户登出

......

// 返回结果

    // 1)成功时返回 
    header('Content-Type: text/xml; charset=utf-8'); // header头声明必须添加
    echo '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:notify="urn:mace:shibboleth:2.0:sp:notify"><SOAP-ENV:Body><SOAP-ENV:LogoutNotificationResponse><notify:OK/></SOAP-ENV:LogoutNotificationResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>';
    return ;
    //2) 失败时返回
    header('Content-Type: text/xml; charset=utf-8'); // header头声明必须添加
    echo '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:notify="urn:mace:shibboleth:2.0:sp:notify"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>LogoutError</faultcode><faultstring>Session logout failed.</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>';
    return ;

5、重启SP服务

[root@www ~]# systemctl restart shibd
[root@www ~]# systemctl restart httpd

6、验证SP登出配置

1)使用学校账号,登录CARSI资源共享门户(https://ds.carsi.edu.cn/

2)登录成功后,选择需要测试的应用资源进行登录,如 ”维普中文期刊服务平台“ 

3)登录完成后访问https://ds.carsi.edu.cn/resource/resource.php,点击用户身份选择 ”退出登录“,开始单点登出。

4)在弹出确认操作框中确认是否登出

5)最终出现如图所示页面,界面会出现服务商各自的EntityID,EntityID前如果出现绿色对勾则表示成功,出现红色叉号则表示失败

 

被动级联登出(OAuth)

1、登录CARSI管理员自服务系统(https://mgmt.carsi.edu.cn ),配置应用系统登出接口地址;

2、SP应用改造,具体步骤可参考:https://carsi.atlassian.net/wiki/spaces/CAW/pages/27103892https://carsi.atlassian.net/wiki/spaces/CAW/pages/114753551

3、验证SP登出配置

1)使用学校账号,登录CARSI资源共享门户(https://ds.carsi.edu.cn/

2)登录成功后,选择需要测试的应用资源进行登录,如 ”爱学术“ 

3)登录完成后访问https://ds.carsi.edu.cn/resource/resource.php,点击用户身份选择 ”退出登录“,开始单点登出。

4)在弹出确认操作框中确认是否登出

5)最终出现如图所示页面,界面会出现spoauth2网关的EntityID,EntityID前如果出现绿色对勾则表示成功,出现红色叉号则表示失败