大话SSO思路

本文介绍了一种跨站点认证方案,利用GUID和令牌实现用户登录验证和角色分配。该方案涉及生成GUID、令牌加密、Forms认证及Redis缓存等技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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个小时查看集合中的用户是否过期,过期就进行从集合中删除。


1、本地生成一个guid并保存cookie,如果没登陆就把这个带到主站点,然后主站点生成一个cookie的token+传过来的Guid进行拼接

2、如果登陆成功将token的值保存到redis缓存中,在redis已token做一个主键对象记录用户信息,

3、每次登陆通过token加用户双方约定契约来进行调用主站点的用户信息

4、当B站点访问的时候,直接返回主站Cookie的token,流程和前面一样


baseToken   6aa76595cb2144d8a4619b4c2d7f0b8c  首先本地需要弄一个随机guid,以区分是本地请求过去的,然后在将主站生成的密钥进行拼接 newToken+baseToken返回给客户端


tempToken  =newToken+baseToken  他是用来记录可能第一次根据token没有获取到用户信息,然后为了第二次请求


remoteToken  =主站返回的密钥=newToken+baseToken




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值