基于 Vue.js 2.x 的完全跨域单点登录 demo
- /src/view/ssoLogin.vue 统一登录中心 所有的子系统都将通过 iframe 内嵌此页面实现登录
- /src/view/subsys1.vue 子系统 1 登录页面
- /src/view/subsys2.vue 子系统 2 登录页面
- /server.js 模拟后端单点登录需要的一个 get 请求接口,此接口也是需要后端配合的地方,此接口部署的域名必须与统一登录中心的域名一致。
- npm install 安装依赖
- npm run all 启动三个服务,分别是前端页面(8080 端口)、模拟的后端接口(3000 端口)、接口 https 代理(4000 端口),启动前确保以上端口没有被其他服务占用
- 因为本地 https 证书无效的原因,要打开 https://localhost:4000/ 和 https://localhost:8080/ssoLogin 这两个网址一下(非常重要,不然子系统的 iframe 无法加载或者接口请求会报错)
- 使用浏览器打开前端服务输出的 2 个子系统链接,这两个子系统的 ip 其中一个是你的局域网 ip,另一个是 127.0.0.1,这是完全跨域的
- 在其中一个子系统输入任意账号密码登录,然后刷新另外一个子系统页面,你会发现另外一个子系统也变成登录状态了,并且 token 相同
- 谷歌浏览器在 84 版本之后将 cookie 的 SameSite 的默认值由 None 改为了 Lax,不发送第三方 cookie,其他浏览器目前默认值还是 None
- 要将 SameSite 设置为 None,必须同时设置 Secure 属性,Secure 只能在 https 环境下使用,所以需要启动 https
- SameSite 属性的详细介绍请参阅 阮一峰的文章
- 因为本地的 https 并不是有效证书,在本地调试过程中,会提示网站 ssl 证书无效,请点击高级-继续前往浏览
- 线上环境的统一登录中心必须使用 https 协议
联系 985313519,微信 QQ 同号