-
Notifications
You must be signed in to change notification settings - Fork 6
Open
Description
sso单点登录流程
具体源码没有详细去看,走了个大概的流程。并找了一个图片来描述一下。
背景关键字:http是无状态协议 会话机制 cookie与session web多系统
背景关键字,不做介绍,只说sso。
往常一个网站就要登陆一次,同一用户再次登陆另一个网站还得再次登陆,也就是不用的网站在保留
session和cookie是各自独立的。既做session的创立也做用户登陆的校验。但如果这几个网站是同一个登
陆呢,比如公司好几个网站,你只要登陆一次sso认证,就可以访问各个页面。所以sso就是为了实现web
多系统下的登陆认证,多系统都接入同一个的sso认证,用户只要登陆过一次,就可以访问接入这个认证
的任何一个系统,不用重复登陆认证。
sso流程
- 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
- sso认证中心发现用户未登录,将用户引导至登录页面
- 用户输入用户名密码提交登录申请
- sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话,同时创建授权令牌
- sso认证中心带着令牌跳转会最初的请求地址(系统1)
- 系统1拿到令牌,去sso认证中心校验令牌是否有效
- sso认证中心校验令牌,返回有效,注册系统1
- 系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护资源
- 用户访问系统2的受保护资源
- 系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
- sso认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
- 系统2拿到令牌,去sso认证中心校验令牌是否有效
- sso认证中心校验令牌,返回有效,注册系统2
- 系统2使用该令牌创建与用户的局部会话,返回受保护资源
用户登录成功之后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过sso认证中心,全局会话与局部会话有如下约束关系
- 局部会话存在,全局会话一定存在
- 全局会话存在,局部会话不一定存在
- 全局会话销毁,局部会话必须销毁
基于nuxt的sso认证:
- 项目入口app.register
- nuxt.config:severMiddleware,中间件:
- midleware下的auth:利用middle的第一参数context的req和store把用户信息放入store
具体看源码
Metadata
Metadata
Assignees
Labels
No labels
