Koa 单点登录
2023年01月06日
一、认识
单点登录是一个身份验证机制,英文全称 Single Sign On
,简称 SSO
。它的定义是: 在多个应用系统中,用户只需要登录一次,即可访问所有相互信任的应用系统,就像健康保一样,为你的身份做担保。
例如访问在网易账号中心(reg.163.com/ )登录之后 访问以下站点都是登录状态:
- 网易直播 v.163.com
- 网易博客 blog.163.com
- 网易花田 love.163.com
- 网易考拉 www.kaola.com
- 网易Lofter www.lofter.com
二、准备
2.1 构建本地多域名系统
说明
构建本地多域名系统:
- 主页: test.com
- 子系统A: a.test.com
- 子系统B: b.test.com
- 子系统C: c.test.com
-
本地
Host
配置如下:备注: 这里使用
SwitchHosts
配置Hosts
127.0.0.1 test.com
127.0.0.1 a.test.com
127.0.0.1 b.test.com
127.0.0.1 c.test.com -
Nginx
配置如下:server {
listen 80;
server_name test.com;
location / {
root /Users/zhangwenqiang/bolawen/nginx;
index index.html;
}
include local.server.proxy.nginx.conf;
}
server {
listen 80;
server_name a.test.com;
location / {
root /Users/zhangwenqiang/bolawen/nginx;
index a.html;
}
include local.server.proxy.nginx.conf;
}
server {
listen 80;
server_name b.test.com;
location / {
root /Users/zhangwenqiang/bolawen/nginx;
index b.html;
}
include local.server.proxy.nginx.conf;
}
server {
listen 80;
server_name c.test.com;
location / {
root /Users/zhangwenqiang/bolawen/nginx;
index c.html;
}
include local.server.proxy.nginx.conf;
} -
本地多域名系统构建完毕,输入地址即可访问
三、原理
在 Cookie
中传递一个自定义的 session_id
。 这个 session_id
是客户端的唯一标记。将这个标记作为 key
, 将客户端需要保存的数据作为 value
, 在服务端进行保存(数据库、Redis)。但是, 在Cookie
传递的过程中, 会有跨域的问题,这里我们通常是通过 Cookie
的 domain
来实现跨域传递。
四、实现
五、问题
session_id
的载体是什么? 为什么要放在Cookie
中 ? 可以放在请求头信息中吗?