如何运营一个行业网站win10必做的优化
本文仅供自学回顾,请支持javaGuide原版书籍。
1.单点登录(SSO)相关概念
单点登录,Single Sign On(简称SSO)
,只需要登录一次,就可以访问所有信任的应用系统。
举个例子:我们在登陆了京东金融之后,我们同时也成功登陆京东的京东超市、京东国际、京东生鲜等子系统。
1.1.SSO有什么好处?
- 用户角度 :用户能够做到一次登录多次使用,无需记录多套用户名和密码,省心。
- 系统管理员角度 : 管理员只需维护好一个统一的账号中心就可以了,方便。
- 新系统开发角度: 新系统开发时只需直接对接统一的账号中心即可,简化开发流程,省时
1.2.SSO常见解决方案
如果是单个tomcat
服务,session
可以共享,如果是多个tomcat
,那么服务session
不共享。为此我们需要提出针对单点登录的解决方案。
单点登录解决方案
- JWT(常见)
- Oauth2
- CAS
1.2.1.OAuth2.0
实际上它就是一种授权机制,它的最终目的是为第三方应用颁发一个有时效性的令牌 Toke
n,使得第三方应用能够通过该令牌获取相关的资源。
OAuth 2.0
比较常用的场景就是第三方登录,当你的网站接入了第三方登录的时候一般就是使用的 OAuth 2.0
协议。另外,现在 OAuth 2.0
也常见于支付场景(微信支付、支付宝支付)和开发平台(微信开放平台、阿里开放平台等等)。
2.实现SSO
主要探讨基于 Web 站点的 SSO。Token是存储在Cookie中的。
2.1.核心功能和模块
以下为需要实现的核心功能:
- 单点登录
- 单点登录
- 支持跨域单点登录
- 支持跨域单点登出
- AuthToken:
直接使用 UUID/GUID 即可,如果有验证 AuthToken 合法性需求,可以将UserName+时间戳
加密生成,服务端解密之后验证合法性 - 登录信息
通常是将 UserId,UserName 缓存起来用户登录/登录校验
2.2.时序图
需要注意的是,原javaGuide的时序图上写的都是
domain=test.com
,然而这是不太严谨的,图中应该改为domain=.test.com
。这样才能实现子域共享。
2.2.1.登录时序图
2.2.2.登录校验时序图
2.2.3.登出时序图
用户登出时要做的事情很简单:
- 服务端清除缓存(Redis)中的登录状态
- 客户端清除存储的 AuthToken
注意,设置Cookie中的AuthToken过期时,必须确保domain与最初颁发Cookie时设置的domain完全一致。
2.2.4.跨域登录/登出(⭐)
跨域要解决的问题,就是如何解决 Cookie 的跨域读写问题。
解决跨域的核心思路就是:
- 登录完成之后通过回调的方式,将 AuthToken 传递给主域名之外的站点,该站点自行将 AuthToken 保存在当前域下的 Cookie 中。
- 登出完成之后通过回调的方式,调用非主域名站点的登出页面,完成设置 Cookie 中的 AuthToken 过期的操作。
跨域登录
跨域登出