现在几乎每个网站都需要某种形式的身份验证才能访问其功能和内容。
在本文中,我们将研究 SSO 身份验证的方案演进。
问题描述
开发团队迟早会面临一个问题,已经开发了网站 A,新开发的网站 B 希望使用网站 A 的登录信息,而不是使用一套新的登录信息,如下图所示:
问题的解决方案显然是实现跨不同域之间共享会话信息。但是,由于安全原因,浏览器会强制执行同源策略 - Same Origin Policy。
解决方案
要解决不同域之间共享会话信息,一个最简单粗暴的办法就是让网站同域,如下图所示:
2. 网站 A 发现无 *.domain.com 的 Cookies,重定向到认证中心
4. 认证中心保存 Cookies 到 *.domain.com
6. 网站 A 读取 *.domain.com 下的 Cookies 完成校验,展示网站内容
8. 网站 B 读取 *.domain.com 下的 Cookies 完成校验,展示网站内容
非同源解决方案
不同的 SSO 协议以不同的方式共享会话信息,但基本概念是相同的:有一个认证中心,执行身份验证,然后以某种方式与其他域共享会话信息。
然后通过重定向的方式,把 Token 传回原始站点,Token 包含需要验证用户所需的所有信息。
2. 网站 A 发现无 domain1.com 的 Cookies,重定向到认证中心
4. 认证中心保存 Cookies 到 auth.com
6. 网站 A 校验 Token 完成验证
8. 用户浏览网站 B
10. 认证中心发现有 auth.com 的 Cookies,对 Cookies 进行校验
12. 网站 B 校验 Token 完成验证
总结归纳
以上就是本文需要介绍的 SSO 相关内容,大家有问题的话欢迎在文章或者在公众号 - 跬步之巅留言交流。