技术分享,经验共享 —— 浅谈 ASP.NET 安全认证与单点登录(Single Sign On)

cityhunter172 2005-12-06 09:59:16
ASP.NET 安全认证(一)——如何运用 Form 表单认证
介绍 Form 表单认证的用法:修改 Web.config;登录与退出的 .cs 代码;判断验证与否及获取验证后的用户信息;

ASP.NET 安全认证(二)——灵活运用 Form 表单认证中的 deny 与 allow 及保护 .htm 等文件
介绍 Form 表单认证的实战运用:Web.config 的作用范围;允许与拒绝某个用户;集中整个项目中的 Web.config;保护 .htm 、.js 等普通文件

ASP.NET 安全认证(三)——用Form 表单认证实现单点登录(Single Sign On)
述了 Machine.config 的内容及其与 Web.config 的关系;实现单点登录(Single Sign On)的前提与步骤;Cookie 在 ASP.NET 的用法;如何创建永久性 Cookie

详见我的博客:http://blog.csdn.net/cityhunter172/

也欢迎大家访问我个人全权开发的作品演示网站 http://172.meibu.com
目前只有三个,其它项目只是部分参与,不便公开。主要是想换工作了,所以才会把项目布署上来,关于可能涉及到侵权的图案及文字一律删了……

所谓全权开发指的是:从数据库存储过程、触发器写到客户端 javascript 最后再到美工(美术工底不深没有 gif ,呵呵)
大家有何疑问,可在此提出,只要不涉及到数据结构,其它功能是怎么实现我将尽量回答
...全文
1413 65 打赏 收藏 转发到动态 举报
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
cityhunter172 2006-01-08
  • 打赏
  • 举报
回复
再次感谢 cat_hsfz()
此贴到此为止,结了。

欢迎大家继续关注并支持我的博客
http://blog.csdn.net/cityhunter172
已有新篇《图解使用VS.NET部署含水晶报表的网站》
cat_hsfz 2006-01-07
  • 打赏
  • 举报
回复
“不合作的站点”指的是不帮你做下一步Redirect的。当然,也有可能因为用户根本访问不了转跳中途的某个站点而断掉。注意这里说的是有些站点可能是某个登录用户根本访问不了的(例如用户在Intranet,管理员封了该网站)。

然后解释一下中央存储会话的概念吧。为什么我用“会话”而不用Session,就是特意说明这是一个一般意义上的会话,而不是通过ASP/ASP.NET内建Session对象实现的会话。最简单地说,现在给你一个ASP/ASP.NET环境,但这个环境缺少Session对象,你知道如何去实现,对吧。也就是Session的原理一样,给一个SessionID客户端,然后有关的值保存在服务器,这个服务器是你自己写的类似StateServer,或者串行化存在数据库,都可以。

接下来就是中央存储会话,也就像Web Farm(这是个MS的说法,其实就是一群用于Web的MS Server Family服务器)那样,用一个中央的SQL Server或者State Server保存Session。当然,你要做大型的,这个还是不能用Session,你要自己写会话管理有关的东西。接下来你要问的肯定是,Web Farm是同一个域名下的,Cookies能够共享,当然可以同一个Session,但是跨域名怎么办。

说这个问题,我先定义两个会话对象,LocalSession指个站点独立的会话,GlobalSession指整个SSO的会话。当一个用户进入一个合作站点的时候,也就是LocalSessionStart,合作站点把它引导向中央站点,中央站点如果也是GlobalSessionStart,那就给它分配GlobalSessionID咯,否则它肯定已经有GlobalSessionID。中央站点重新把用户引导回合作站点,并且通过QueryString把GlobalSessionID传递给合作站点,合作站点把GlobalSessionID存到LocalSession或者Cookies里面去。之后这个用户一切的浏览操作,如果仅仅和合作站点相关,就存放到LocalSession,如何和全局相关,合作站点就有义务把该数据更新到GlobalSession,同时只要该用户还在活动,合作站点就有义务告诉中央站点该GlobalSession仍然活动。当用户注销的时候,中央服务器就要以Push方式主动让所有合作站点(至少是曾经得到过该GlobalSessionID的)知道该GlobalSessionID过期。

大概就是这样,其中有不少缺陷和安全漏洞,但是为了描述一个最简单的模型就这样说啦。.NET Passport或者很多其它Passport都是类似的,不过安全性方面可能各种Passport会有不同的策略。
blueskygenius 2006-01-07
  • 打赏
  • 举报
回复
UPUP
cityhunter172 2006-01-07
  • 打赏
  • 举报
回复
为了革命,偶顶一下
cityhunter172 2006-01-03
  • 打赏
  • 举报
回复
TO cat_hsfz() :
感谢你的意见,在此发表一下我个人看法,大家也可以参与讨论。

1、关于“不合作”站点,我想这点用不着担心,既然他已经同意使用单点登录,那么该站点就允许你参与站点登录的制作。关于跳转中出现的问题,我在文章中已经提出,就是该站点当机或是网络问题造成跳转访问失败。

2、关于你所说的 Server to Server 的做法,能否说说你的具体实现方法。但你所说的“中央服务器保存用户数据和会话状态”,我不甚了解:
a). IE 每次浏览不同站点,其 ASPNET_Session_ID 都是不一样的(只有浏览同一站点,且从父窗口点击进去,才一样);
b). 即使你用脚本也不能进行跨站点的数据交流,比如,
window.opener.document.getElementById("Txt_StartDate").value
服务器又是怎样判断,此用户会话非彼用户的会话,也就是说,IE 是怎样在浏览不同站点的同时又继承父窗口会话的?

3、对于“攻击者”,它们无非是截取了带 Cookie 的 URL 请求字串,然后直接在地址栏输入该 URL 。目前我想到的解决方法是在跳转时加上一个时间戳,然后使用 PKI 再次加密
cityhunter172 2005-12-31
  • 打赏
  • 举报
回复
TO bosswolf(唐龙) :
看了你的博客,给你些建议

1、控件的命名,不一定要求用标准的英语语法,但一定要有一定的意义,中文式的简单英语也行,^_^ 即使是做练习。Label1、Label2 写的时候是清楚什么意思,如果是做项目的话,以后维护起来就难啰。可参考 Lab_StartDate,Lab_EndDate

2、dan.Text="单价:"+"<b>"+dr["单价"] +"</b>"; 这种写法不可取,应该把 “单价:”放到 HTML 中 ,然后限定控件 dan 的粗体样式。在 .cs 中尽量少写 HTML 代码,以免给美工人员带来困扰。

3、数据库中的字段名最好不要用中文,中文有简繁体,操作系统也一样,容易变成乱码。习惯性做法是把中文写进字段的备注栏
cat_hsfz 2005-12-31
  • 打赏
  • 举报
回复
看完1~3篇,发现这个SSO不能够跨域名,因为Cookies不能够跨域名访问。然后发现有第4篇,就看第4篇。

作为一个对内的SSO,虽然一个站点传一个站点的通知办法可以实现,也不需要怕有站点“不合作”,但始终不附和解藕的要求;如果是对外开放合作,那就更不可以了,你不知道哪个合作站点会“不合作”不帮你转跳通知下一个站点。至于第二种方法,我还没看懂。

一般做SSO,都逃离不了MS的.NET Passport思路,特别是你要考虑最无赖的用户(也就是攻击者)和最不合作的合作站点。这时候不是Client to Server的沟通就能解决问题的,还需要Server to Server的沟通。首先需要有一个中央Server保存用户数据和会话状态。一个用户成功登录之后,无论他浏览哪个合作站点,该站点都是查询中央服务器来确定其会话状态,就有点类似分布式站点通过把Session保存到SqlServer共享Session一样。
cityhunter172 2005-12-31
  • 打赏
  • 举报
回复
昨天收一网友的短消息,问我第四部分写好没

我还是第一次被人催稿,感觉还算不错,呵呵……

现在隆重向大家宣布,

【原创】ASP.NET 安全认证(四)
——巧妙实现 Form 表单认证跨站点、跨服务器的单点登录(Single Sign On)

现已完成,欢迎大家提出宝贵的意见。

http://blog.csdn.net/cityhunter172/
uscool 2005-12-30
  • 打赏
  • 举报
回复
支持一下!
mail25 2005-12-30
  • 打赏
  • 举报
回复
ding
makubex_huang 2005-12-30
  • 打赏
  • 举报
回复
study
zy44995 2005-12-30
  • 打赏
  • 举报
回复
支持你!
cityhunter172 2005-12-30
  • 打赏
  • 举报
回复
TO zxilu(江湖) :
我的站点用的是 javascript 写的滑动菜单,若看不到菜单,脚本是不是被禁用了
因为我没装 FireFox ,所以没有更多的考虑兼容性,不好意思啦
bosswolf 2005-12-30
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4488/4488769.xml?temp=.1312067
来而不往 非礼也。
这是我学习NET的经历。也欢迎楼主到我的博客上做客。
zxilu 2005-12-30
  • 打赏
  • 举报
回复
呵呵,什么东西啊?登陆后叫我选择登陆站点,可是我根本就没法选择站点。是不是不支持FireFox?
cityhunter172 2005-12-09
  • 打赏
  • 举报
回复
TO zeusvenus(清柳,需要讨论请发消息) :
这都被你发现啦,真不简单!

TO beger(乞者):
你可以在这提问呀,这里有很多热心人的。
我是 2002-5-12 注册的,在此受到了 N 多人的帮忙。
思归,孟子等人 才是这里真正的高手,我有很多问题都是请他们解决的

另:你可发短消息给我,把你提的问题的网址告诉我即可
xiaozhang353 2005-12-09
  • 打赏
  • 举报
回复
mark
beger 2005-12-09
  • 打赏
  • 举报
回复
楼主厉害,以后在用.NET中有问题,可以直接问你么?我看了你的ASP.NET 安全认证,感觉你很了不起啊,现在正在研究.我做了一个图书信息检索系统,用了那个Session 和Server对象,用得还算可以,就是当我退出管理员界面后,点击IE上的后退可以直接进去,我郁闷啊?
思源6DZ 2005-12-09
  • 打赏
  • 举报
回复
mark
zeusvenus 2005-12-09
  • 打赏
  • 举报
回复
"1997年10月 在江西公安专科学校第一次站岗的第一分钟"
Cool:)
加载更多回复(45)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧