您的位置:首页 > 运维架构 > 网站架构

跨平台跨服务器跨网站SSO(单点登录)方案的DEMO

2006-11-21 16:01 309 查看
登录

1. 打开A网站进行登录;

2. 检测Login服务器是否可用;

3. 如果Login服务器可用,检测发现Login服务器Session未创建;

4. 重定向到A网站的页面,接受Login服务器传来的Key和UID组成的类序列化后的数据;

5. 得到的Key是1,说明Login服务器Session未创建,在A网站创建Session,登录完成后使用<script>访问Login服务器上的页面创建Session并记录网站名和网站登出页面地址;

6. 打开B网站登录,发现没有登录,检测Login服务器是否可用;

7. 如果Login服务器可用,检测发现Login服务器Session已经创建并记录网站名和网站登出页面地址;

8. 重定向到B网站的页面,接受Login服务器传来的Key和UID组成的类序列化后的数据;

9. 得到的Key不是1,说明Login服务器Session已经创建,根据Key到数据库进行验证,验证通过后在B网站创建Session。

登出

1. 每个网站都有登出按钮,点击按钮后先清空本地Session;

2. 然后检测Login服务器是否可用;

3. 可用的话跳转到Login服务器的登出页面;

4. 根据Session中存储的已登录网站名和登出页面地址,生成<img>指向各个网站的登出页面;

5. 登出成功后登出页面显示图片(返回图片流),如果登出失败(页面不能访问)则显示本地登出失败图片。

特点

1. Login服务器就算Down了各个网站也能分别登录和登出;

2. 巧妙使用临时GUID来做验证令牌;

3. 巧妙使用script和img的src来访问登录登出页面创建和撤销Session。

完整代码下载

已经测试通过:
1、登录服务器和两个网站部署在三个服务器,同时登录同时退出
2、登录服务器关闭,两个网站都能各自登录和退出

注:Login和WebSiteTest分别是登录网站和测试网站。在测试的时候,WebSiteTest部署到2个服务器,Login部署到第三个服务器,注意修改WebsiteTest的web.config文件中的:
<appSettings>
<add key="RegLogin" value="http://pc-yzhu/login/default.aspx?key={0}logouturl={1}name={2}"/>
<add key="LoginUrl" value="http://pc-yzhu/login/default.aspx?url={0}logouturl={1}name={2}"/>
<add key="LogOutUrl" value="http://pc-ywgong/WebSite/LogOut.aspx"/>
<add key="name" value="WebSite"/>
</appSettings>

这个代码是测试代码,写的比较乱。如果有时间的话,我们会把所有的东西封装成自定义控件和类。

有些网友不明白最基本的原理,可以点击这里下载最简单的代码

posted on 2006-10-11 13:02 lovecherry 阅读(1734) 评论(15) 编辑 收藏 引用 网摘

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: