C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

最近公司接到一个项目需要一个SSO 单点登录功能,通过查阅资料完成了系统底层的搭建。

我是通过这个博主的文章实现的,大家也可以参考一下:

https://www.cnblogs.com/ywlaker/p/6113927.html#!comments

他这里面详细的介绍了SSO的含义及实现的过程,我这边就是参照他进行的开发。下面进入正题:

使用的工具:VS2012 后台存储临时token 使用的是 redis

1.首先VS创建一个网站,取名SSO。

使用Global.asax作为拦截器 拦截网站请求进行分析处理。使用里面的方法:

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

这样只要是访问到本网站任何地方都会进入我们的拦截器。

假如我们现在有2个系统 A,B 和一个SSO 认证中心(每个系统中都有一个Global.asax拦截器)。

那么我们在访问A系统的时候,就好进入拦截器在拦截器里面可以用如下代码 来验证当前用户或者浏览器是否存在登录信息

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

如果我们的A系统当前未登录,那么直接跳转到SSO,在跳转到SSO 页面的时候记得带上A系统的地址,这样方便SSO在登录之后直接进入到我们的A系统。

那么在跳转到SSO 后 ,首先验证一下当前会话是否是登录状态 ,如果不是 那么就返回我们的登录页面(带上A系统的地址)

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

那么我们用户在登录页面录入登录信息之后,进行登录操作

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

那么判断了账户密码之后我们进入登录缓存写入的步骤

首先创建一个临时token(作为票据验证)

然后把浏览器标注为登录状态 ,登录成功之后我们使用 A网站的地址直接跳转过去,在这里我们要把我们生成的票据带上,后续要进行验证。

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

这个url 就是我们访问SSO 带上的A系统的地址。这样我们直接跳转到A系统带上token,那么A系统的拦截器检测到访问的时候进行处理

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

这里我们需要把token 进行一个储存(后续登录B系统。注销系统使用)

这个时候我们只有token 并没有用户信息,所以我们还需要在到SSO 进行验证 这个token是否有效。

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

那么SSO拦截器在检查之后进行token 验证,通过token 拿到我们刚刚登陆的时候储存到redis的userid(在这里可以进行一些验证,比如改用户是否有这个子系统的使用权限,这里有很多实现方式,我们通过A系统的地址进行判断),把当前系统的地址写入到redis (后续注销系统使用)

SSO验证成功后获取userId 一并传送到A系统。A系统进行用户信息写入后直接跳转A系统地址完成整个登录流程。并进入A系统

同时标注当前会话为登录状态

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

那么B系统如何进行登录呢(必须是同一个浏览器才能登录)

其实B系统和A系统一样 首先访问B系统的地址,在B系统的拦截器里面 检查当前浏览器是否是登录状态,由于A系统登录成功后会把浏览器标注为登录状态,所以我们直接获取A系统登录之后缓存到cookie(就是之前A系统登录之后生成的临时token),到SSO 获取用户userid 并标记。同时把B系统的地址记录到redis中(注销的时候使用)。

实际上B系统登录就是把A系统 拿到token 后的步骤在走一遍就完成登录了。那么这里就简单的实习了单点登录功能了。下面讲注销;

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

退出的时候我们带个参数来进行控制

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

我们拦截器检测到有退出参数的时候,我们就清除浏览器的所有缓存,然后带上之前缓存的cookie 到SSO 去注销其他系统。

在SSO接收到注销请求后

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

通过token 获取到当前用户登录过的所有系统地址(之前登录的时候存在redis 中的)然后循环使用iframe 访问。在我们A B 系统拦截到该访问的时候 就会进入到这个方法,然后他就会自己清除自己当下的缓存进行退出。

C# .net,SSO 单点登录+redis使用。 一站登录全网通用简单实现及应用.

 

完结。