原文出处:https://www.cnblogs.com/btgyoyo/p/10722010.html
跨域SSO(CAS)实现过程
-
用户访问产品 a,域名是 http://www.a.cn。
-
由于用户没有携带在 a 服务器上登录的 a cookie,所以 a 服务器重定向到SSO 服务器的地址。
-
由于用户没有携带在 SSO 服务器上登录的 TGC,所以 SSO 服务器判断用户未登录,给用户显示统一登录界面。
-
登录成功后,SSO 服务器构建用户在 SSO 登录的 TGT,同时返回一个 http 重定向(包含 sso 服务器派发的 ST )。
-
重定向的 http response 中包含写 cookie。这个 cookie 代表用户在 SSO 中的登录状态,它的值是 TGC。
-
浏览器重定向到产品 a。此时重定向的 url 中携带着 SSO 服务器生成的 ST。根据 ST,a 服务器向 SSO 服务器发送请求,SSO 服务器验证票据的有效性。验证成功后,a 服务器知道用户已经在 sso 登录了,于是 a 服务器构建用户登录 session。
-
用户访问产品 b,域名是 http://www.b.cn。
-
由于用户没有携带在 b 服务器上登录的 b cookie,所以 b 服务器重定向到SSO 服务器,去询问用户在 SSO 中的登录状态。
-
浏览器重定向到 SSO服务器。由于已经向浏览器写入了携带 TGC 的cookie,所以此时 SSO 服务器可以拿到,根据 TGC 去查找 TGT,如果找到,就判断用户已经在 sso 登录过了。
-
SSO 服务器返回一个重定向,重定向携带 ST。
-
浏览器带 ST 重定向到 b 服务器。
-
b 服务器根据票据向 SSO 服务器发送请求,票据验证通过后,b 服务器知道用户已经在 sso 登录了,于是生成 b session,向浏览器写入 b cookie。