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/">
//解析以上文本获得SessionID ......
//应用系统完成用户登出 ...... // 返回结果 // 1)成功时返回 |
5、重启SP服务
[root@www ~]# systemctl restart shibd |
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应用改造,具体步骤可参考:3. 通过CARSI SP OAuth网关接入(Joining CARSI for OAuth SP)、 SP(OAuth)登出通知接口规范
3、验证SP登出配置
1)使用学校账号,登录CARSI资源共享门户(https://ds.carsi.edu.cn/)
2)登录成功后,选择需要测试的应用资源进行登录,如 ”爱学术“
3)登录完成后访问https://ds.carsi.edu.cn/resource/resource.php,点击用户身份选择 ”退出登录“,开始单点登出。
4)在弹出确认操作框中确认是否登出
5)最终出现如图所示页面,界面会出现spoauth2网关的EntityID,EntityID前如果出现绿色对勾则表示成功,出现红色叉号则表示失败
版权所有©北京大学计算中心