CAS登出逻辑验证

CAS支持灵活登出方式,可以单独登出单个应用,也支持统一登出。

  • 单个应用登出带上认证service

  • 所有应用登出,直接请求/cas/logout

现A,B应用分别登陆CAS,获取ST。

登出A

https://cas.com:8443/cas/logout?service=https://a.com:8444/authorize

CAS会向A应用/authorize发起登出消息(POST请求)

格式如下:

1
2
3
4
5
6
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="LR-1-VM1PfgJD6VEDtCc4NnIWaVLqFs0PktY6Ej9" Version="2.0" IssueInstant="2017-07-20T10:45:39Z">
	<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
		@[email protected]
	</saml:NameID>
	<samlp:SessionIndex>ST-2-HtrBiWrgRD9DFgL25GI9-passport.edu</samlp:SessionIndex>
</samlp:LogoutRequest>

A应用处理登出请求。

不带service A,B应用都会收到登出消息。

使用phpCAS处理登出栗子👇

phpCAS认证通过后,会设置PHPSESSID:ST-2-HtrBiWrgRD9DFgL25GI9-passport.edu

将对应session销毁即可

1
2
3
4
session_id('ST-2-HtrBiWrgRD9DFgL25GI9-passport.edu');
session_start();
session_unset();
session_destroy();

参考文章:

CAS 4.1.x 单点登出(退出登录)的原理解析

updatedupdated2020-04-282020-04-28
Load Comments?