大话SSO思路

在web.config中配置<httpModules>指定到自己写的一个dll,这个类用来获取令牌保存本地cookie和创建forms认证。(主站的令牌存在在主站的一个数据库表中,用来作为登陆的用户日志)


这个dll首先会生成一个guid用来到主站点获取密钥加密的后缀。根据返回回来的密钥调用主站点的webserver的方法,根据这个密钥参数返回用户判断是否为空,如果为空就跳转登录,反之跳转到指定页面中。(这里dll生成的guid只是用来主站和子站点的一个安全契约,而主站获取过来的GUid才作为webserver的查询),在通过返回过来的用户名调用webserver查询这个用户名的角色给到forms cookies


主站登录会根据跳转过来的密钥参数值,对cooke进行赋值。


用户的信息会再登陆的时候根据cookie保存的key进行对表中的所有用户记录查询出来,放入System.Collections.ObjectModel.KeyedCollection<string, Iitem>中进行存放。然后当你进入页面的时候,只需要根据cookie中存放的key对KeyedCollection查找就行了,(此处使用单列模式,这样就不需要网数据库查询了,减少数据库压力)如果有就返回name,没有就返回"";(或者登陆的时候看看KeyedCollection里面是否有这个用户,如果有就更改一下过期时间,反之就保存一条到keyedCollection里面)。

主站退出时会对KeyedCollection集合进行删除,然后退出Forms认证,当实例一条用户进入集合时,会做个定时器,后台开启一个线程,每隔4个小时查看集合中的用户是否过期,过期就进行从集合中删除。

你可能感兴趣的:(大话SSO思路)