单点登陆SSO(Single Sign On)

Q:什么是单点登陆

在多系统应用群众登陆一个系统,便可在其他所有系统中得到授权而无需再次登陆,包括单点登陆和单点注销两部分。即一家企业下的服务只要一次注册,登录的时候只要一次登录,退出的时候只要一次退出。

Q:为什么需要单点登陆

在企业级应用中,存在多个子系统,难道要一个一个登陆、认证、注销?Web系统由单系统发展成多系统组成的应用群,对用户而言,是一个统一的整体,因此用户访问整个应用群,只需要一次登陆注册即可。

单点登陆SSO(Single Sign On)_第1张图片
单点登陆原理.png

Q:单点登陆如何实现

实现单点登陆主要是解决以下问题:

  1. 如何产生和存储信任
  2. 其他系统如何验证这个信任的有效性

实现方案:通过父子应用来回重定向进行通信,实现信息的安全传递。

  1. 父应用提供一个GET方式的登陆接口如https://passport.58corp.com/login
  2. 子应用http://fecar.58corp.com通过重定向的方式访问这个接口https://passport.58corp.com/login?service=http%3A%2F%2Ffecar.58corp.com%2F
  3. 如果用户没有登陆,返回一个登陆页面;如果用户已经登陆了,则生成加密的Token,重新进行登陆验证,验证通过进入子应用。

SSO提供一个认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登陆入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。

会话机制

浏览器第一次请求服务器,服务器创建一个会话,并将会话的id作为响应的一部分发送给浏览器,浏览器存储会话id,并在后续第二次和第三次请求中带上会话id,服务器取得请求中的会话id就知道是不是同一个用户了,后续请求与第一次请求产生了关联。

tomcat会话机制当然也实现了cookie,访问tomcat服务器时,浏览器中可以看到一个名为“JSESSIONID”的cookie,这就是tomcat会话机制维护的会话id。

同理访问Express服务器时,浏览器中也可以看到一个cookie。
如下所示。


Express会话id

在使用Express时候,会设置session中间件,secret对session id相关的cookie进行签名;name是session id的名字,即cookie键名,默认为sid。


单点登陆SSO(Single Sign On)_第2张图片
session中间件.png

Cookie

  1. Cookie不能跨域。
  2. 通过加密Cookie可以保证安全性,前提是源码不泄露。如果Cookie的加密算法泄露,攻击者通过伪造Cookie可以伪造特定用户身份。
  3. 浏览器发送http请求时会自动携带与该域匹配的cookie信息。

参考:
https://www.cnblogs.com/ywlaker/p/6113927.html

你可能感兴趣的:(单点登陆SSO(Single Sign On))