为何基于目录服务与Cookie的SSO仅支持单一互联网域?
问题1:重定向模式的早期SSO为何依赖Cookie?
早期重定向式SSO的核心逻辑是靠SSO服务器统一验证用户身份,而Cookie是SSO服务器维持用户登录状态的关键:
- 用户首次访问未登录的业务系统(如app1.mycompany.com)时,系统会将用户重定向到SSO服务器。用户完成登录后,SSO服务器会在自身域下设置一个会话Cookie,这个Cookie存储了用户已登录的会话标识。
- 后续用户访问同域下的其他业务系统(如www.mycompany.com)时,该系统会再次将用户重定向到SSO服务器。此时浏览器会自动携带之前SSO服务器设置的Cookie,SSO服务器通过这个Cookie识别出用户已处于登录状态,无需重复验证,直接重定向回业务系统并完成授权。
- 若没有这个Cookie,SSO服务器无法识别用户身份,每次重定向都需要用户重新登录,单点登录的逻辑也就无法成立。
问题2:为何无法支持外部SaaS,但能在同一主域的子域间工作?
这完全由浏览器的Cookie同源策略决定:
- 子域共享Cookie的原理:如果SSO服务器设置Cookie时,将
Domain属性指定为.mycompany.com(注意前缀的点),这个Cookie会被所有属于mycompany.com的子域(如app1.mycompany.com、www.mycompany.com)共享。当这些子域重定向到SSO服务器时,浏览器会自动携带该Cookie,SSO服务器能正常识别用户,从而实现子域间的SSO。 - 无法支持外部SaaS的原因:外部SaaS(如salesforce.com)与
mycompany.com属于不同顶级域,浏览器的同源策略会阻止Cookie跨顶级域传递。当用户从外部SaaS重定向到mycompany.com的SSO服务器时,浏览器不会发送mycompany.com域下的Cookie,SSO服务器无法识别用户身份,自然无法完成授权;同时跨域场景下的凭证传递也会被同源策略限制,导致早期SSO无法跨顶级域工作。
内容的提问来源于stack exchange,提问作者Orca
相关产品推荐
相关产品推荐

