asp.net单点登录实现

发布时间:2020-12-02编辑:脚本学堂
本文结合工作实际,实现了一个最简单的asp.net单点登录,供大家学习参考。

本文结合工作实际,实现了一个最简单的asp.net单点登录,供大家学习参考。

概要原理

假设有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,当然知道已经登出了。