单点登录(iwantmoon.com出品)

早年便听到单点登录,一直因为感觉很简单,就没有动手去弄,正好现在公司有要求,那么OK,直接做了一个单机版的单点登录。

原理,可以参考SSO

Now,我们来看看我的实现吧。看下图

 

单点登录(iwantmoon.com出品)_第1张图片

我们平时所做的登录,基本有两种做法:

1、Session,当我们将Passport存入Session的时候,我们可以方便的在Controller里面使用它,同时Session天生的过期策略,也很方便了我们。

2、Cookie,由于Session只能用于单机的环境,当Web Server需要集群的时候,我们就不得不考虑使用Cookie,当然虽然有一些会考虑Session共享,但这种方式并非主流。

Ok,普通的作法,并不能做到对单点的限制,那么当我们要做一个单点登录,在设计上我们需要考虑什么呢?

首先,对于网页来讲,我们不能做app可以在OS里写东西,那么只能在Cookie留下浏览器标识,也就是上图的BrowserID,它用于唯一标识一个浏览器。

然后,我们将Identity(UserId)也保存到cookie里面,现在在终端,我们的工作就算完成了。接下来我们考虑服务器端的设计。

如上图,我们需要维护一个Set,如上图:BrowserID userId loginTime,单点登录是需要考虑到过期的策略的,因为我们不再有Session的自动过期,那么就要考虑,我们是需要一个守护进程,来做这个事情,还是通过别的方式,我这里,通过在get中,直接排除的策略,减少了一个守护线程。也就是说,我在遍历的时候,如果遇到过期的项目,会自动remove掉这个项目。

 

讲到此,基本讲完了,由于本人不常写贴,水平有限,请大家见谅,同时大家有问题欢迎加群讨论:299388502,稍后我也会将代码开源到 github上面。

你可能感兴趣的:(单点登录)