• 单点登录


    近来搞了一下单点登录。

    我们弄的单点登录估计是最简单的。

    【概要原理】:

    假设有2个应用站点A和B,都需要登录才可以访问,另外有一个专门负责登录的站点SSO。

    现在有个用户访问站点A,站点A会先检查该用户是否已经登录,如果已经登录,则返回相应页面;否则转向SSO进行登录,登录成功后,转回站点A,返回请求的相应页面。

    接着,该用户又访问站点B。同样,站点B会先检查该用户是否已经登录。这时候发觉是已经登录,于是直接返回请求的相应页面。

    这就是单点登录,一次登录,处处通行。

    【细节原理】

    如何知道用户是否登录?

    在SSO登录的时候,会将登录信息记入SSO的COOKIE;返回应用站点A或B时,同时将登录信息记入A或B的COOKIE。因此,登录信息在SSO和应用站点各有一份。

    当有用户请求页面的时候,应用站点先检查自身的COOKIE,有的话,就表示已经登录,没有才转向SSO进行登录。

    转到SSO的时候,SSO也先检查自己的COOKIE,看是否已经登录,有的话则自动转回应用站点,告诉应用站点该用户已经登录;如果没有COOKIE,才出现登录界面,让用户进行登录。因此,无论哪个应用站点先登录,SSO都有COOKIE,从而实现单点登录。

    SSO上的COOKIE应该是永久性COOKIE或者时间比较长的COOKIE,例如2周,1个月,等等;而应用站点的COOKIE是临时性COOKIE,浏览器关掉就会消失那种。

    【登出】

    步骤是先清除应用站点的登录COOKIE,然后转到SSO清除SSO的COOKIE。

    由此可知,单点登录不等于单点登出,站点A登出以后,站点A和SSO的COOKIE都被清除,但站点B的COOKIE还在,它并不知道已经登出了,除非浏览器被关掉,否则它还可以正常运行。

    看起来这是一个BUG。不过,对安全性要求不高的情况下,并不会出现很大的问题。

     

    后记

    其实,要实现单点登出也不难,就是所有应用单点登录的站点,其COOKIE的Domain都指向一级域名(注意,www.abc.com是二级,abc.com才是一级)。如下:

                  cookie.Secure = false;
                        cookie.Domain = ".abc.com";

    这样,某个子站点登出以后,修改了这个cookie;而其他子站点也是读这个COOKIE,当然知道已经登出了。

  • 相关阅读:
    Python 操作Excel之通过xlutils实现在保留原格式的情况下追加写入数据
    【转载】Python字符串操作之字符串分割与组合
    【转】Python判断字符串是否为字母或者数字
    Appium 在测试android混合应用时,关于webview页面切换的那些事儿
    使用pip install XX 命令时报错
    Appium笔记(二) 丶Appium的安装
    Android SDK的下载与安装
    KlayGE 4.4中渲染的改进(五):OpenGL 4.4和OpenGLES 3
    最先进的开源游戏引擎KlayGE 4.4发布
    KlayGE 4.4中渲染的改进(四):SSSSS
  • 原文地址:https://www.cnblogs.com/leftfist/p/4258179.html
Copyright © 2020-2023  润新知