关于sso:实战模拟│单点登录-SSO-的实现

13次阅读

共计 1194 个字符,预计需要花费 3 分钟才能阅读完成。

🎈 什么是单点登录

  • 单点登录: SSO(Single Sign On) 用户只需登录一次,就可拜访同一帐号平台下的多个利用零碎。
  • 比方阿里巴巴这样的大团体,旗下有很多的服务零碎,比方天猫,淘宝,1688 等等,如果每个子系统都须要用户进行登录认证,预计用户会被烦死。
  • SSO 是一种对立认证和受权机制,去解决这种反复认证的逻辑,进步用户的体验。

🎈 单点登录的凭证

  • 由单点登录的原理,能够看进去,最重要的就是这个通用的登录凭证 ticket 如何取得
  • 而实现 ticket 多利用共享次要有三种形式: 父域加密 Cookie、用户认证核心、Localstorage

🎈 父域 Cookie 形式

  • 用户在登录父利用后,服务端返回用户登录后的 cookie,客户端将该 cookie 保留到父域中
  • 这个 cookie 最好通过加密解决,因为 Cookie 自身并不平安
  • 这种加密算法只有服务端才能够晓得,服务端的解密算法不能暴漏
  • 放在父域中,次要是因为 Cookie 不能跨域实现免登,放到父域中能够解决跨域的问题
  • 父域也就是 domain 要设置成主域名,而非二级域名,这样二级域名就能够应用同一个 Cookie
// 如果某个平台有三个利用,别离是:// 门户利用:www.autofelix.com
// 商城利用:shop.autofelix.com
// 领取利用:pay.autofelix.com

document.cookie = "ticket=xxxxxx;domain=.autofelix.com;path=/

🎈 用户认证核心形式

  • 应用一个认证核心,用来专门负责解决登录申请
  • 用户核心不解决业务逻辑,只是解决用户信息的治理以及受权给第三方利用
  • 第三方利用须要登录的时候,则把用户的登录申请转发给用户核心进行解决,用户处理完毕返回凭证,第三方利用验证凭证,通过后就登录用户。
  • 流程是用户拜访利用零碎,利用零碎先检查用户是否有 Ticket,如果没有,则阐明用户在该利用上尚未登录,跳转到用户核心,通过用户核心的 Cookie 去判断用户是否在其余利用上进行了登录
  • 如果认证核心发现用户尚未在其余任何利用上执行过登录,则提醒用户执行登录操作,期待用户登录后,生成 Tickcet,并让 Ticket 拼接在 URL 上,重定向回利用零碎
  • 当利用零碎拿到 Ticket 后,将从新向用户认证核心发动验证,避免该 Ticket 是用户伪造,验证胜利后,记录用户登录状态,并将 Ticket 写入到以后利用的 Cookie
  • 而当用户拜访该利用零碎时,就都会带上以后的 Ticket,也就能失常拜访服务了

🎈 localstorage 形式

  • 当用户在一个利用下登录后,前端能够通过 iframe+postMessage() 形式,将同一份 Ticket 保留到多个域名下的 LocalStorage
  • 然而这种形式齐全由前端管制,后端仅仅须要将用户登录胜利后的 Ticket 返回给前端解决即可
  • 这样其实也实现了,多利用下单点登录的问题,并且反对跨域

正文完
 0