跳到主要内容

Koa 单点登录

2023年01月06日
柏拉文
越努力,越幸运

一、认识


单点登录是一个身份验证机制,英文全称 Single Sign On,简称 SSO。它的定义是: 在多个应用系统中,用户只需要登录一次,即可访问所有相互信任的应用系统,就像健康保一样,为你的身份做担保

例如访问在网易账号中心(reg.163.com/ )登录之后 访问以下站点都是登录状态:

二、准备


2.1 构建本地多域名系统

说明

构建本地多域名系统:

  • 主页: test.com
  • 子系统A: a.test.com
  • 子系统B: b.test.com
  • 子系统C: c.test.com
  1. 本地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
  2. 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;
    }
  3. 本地多域名系统构建完毕,输入地址即可访问

三、原理


Cookie 中传递一个自定义的 session_id。 这个 session_id 是客户端的唯一标记。将这个标记作为 key, 将客户端需要保存的数据作为 value, 在服务端进行保存(数据库、Redis)。但是, 在Cookie传递的过程中, 会有跨域的问题,这里我们通常是通过 Cookiedomain 来实现跨域传递

四、实现


五、问题


  1. session_id 的载体是什么? 为什么要放在 Cookie 中 ? 可以放在请求头信息中吗?