宝玉的blog

专注于web开发技术
随笔 - 78, 评论 - 1563, 引用 - 157

导航

关于


目前致力于ChinaCommunityServer的开发。

msn: junminliu(at)msn.com

标签

每月存档

最新留言

  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:37
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:31
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:30
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:29
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Openlab V2.0 Beta
    <p>宝玉你好: &nbsp; &nbsp; &nbsp; 我是个.net新手,最近看了openlab(openlab_V2.0_Beta)的源码。 ...
    by isforge(注册) on 2009/6/28 10:10:25
  • re:Silverlight中,防止ComboBox抢焦点
    在家”用网路”赚全世界的钱! 这是真正实现跨国事业最好的机制。藉由网路无远弗届的力量, 让全球超过180个国家变成一个单一市场,在你加入的那一刻, 网路能到达的地方,就是你收入能到达的地方。 ...
    by jackielongteng(注册) on 2009/6/14 13:19:48
  • re:Silverlight中,防止ComboBox抢焦点
    <p>我是初学者,您已经写了一个 组件上传的功能 。。我在2008下测试通过,,,但是弄2005测试的时候 发现 progress.aspx.cs页面的</p> <p&...
    by jxh12345j(注册) on 2009/4/7 8:55:12
  • ufnnutdh - Google Search
    ufnnutdh - Google Search
    by (匿名) on 2008/10/27 17:44:45
  • veysaync - Google Search
    veysaync - Google Search
    by (匿名) on 2008/10/5 5:20:49
  • mzgmhgio - Google Search
    mzgmhgio - Google Search
    by (匿名) on 2008/9/22 23:34:49
  • rhmhnyma - Google Search
    rhmhnyma - Google Search
    by (匿名) on 2008/9/22 7:48:44
  • re: 发布一个爱心小软件——网页抓图
    Maxthon应该有这个功能
    by passos(匿名) on 2008/7/21 20:05:23

广告

 

今日偶然阅读了Understanding Single Sign-On in ASP.NET 2.0 这篇关于单点登录的文章,仔细阅读,发现还是有些不尽完整之处。

文中对于单点登录的介绍,忽略了一个重要问题——就是站点的域的问题。在深入讨论这个问题之前,先简单介绍一下网站域的概念,举个例子,假如我们有三个站点:
A: blog.joycode.com; B: beta.joycode.com; C: www.openlab.net.cn 。那么A站点的域是"blog.joycode.com",它的主域是"joycode.com";B站点的域是"beta.joycode.com",它的主域是"joycode.com";C站点的域是"www.openlab.net.cn" ,它的主域是"openlab.net.cn"。对于A和B来说,他们是不同的网站域,但是主域是相同的,都是"joycode.com",对于A和C来说,不管是域还是主域,都不相同。一般我们所说的单点登录,都是指A,B,C这三类站点可以在一点登录,实现所有的站点都不需要再次登录,甚至于不仅限于网站之间,也可能是从其他客户端到网站。一般比较大的系统都需要这样的单点登录系统,例如著名的微软的Passport,还有飞信的SSO。

回过头来看这篇单点登录文章,按照这种方案,仅能实现同一域下各虚拟目录的单点登录,离真正的单点登录还差得远,当然,文章的思路,对于同一域下的虚拟目录,或者同一主域的不同站点,还有有意义的。

前面说到了文章中的方案还只能实现同一域下的不同虚拟目录的单点登录,还不能实现同一主域的单点登录,那么怎么样才能在这个方案基础上实现同一主域的不同站点的单点登录呢?

文章的核心部分在于让每个站点的MachineKey保持一致,采用Form验证,这样可以保证每台服务器Cookie加密解密的结果是一致的。Form验证将登录后的授权凭证加密后保存在Cookie中,由于同一域下面的虚拟目录,Cookie是可以共享的,因此可以同一域内直接实现单点登录,而对于不同域,Cookie是不能直接共享的,所以对于不同域而同一主域的情况,我们还需要将Cookie的domain设为主域。那么还以前文的A、B站点为例,要实现单点,我们只要在web.config中,配置authentication \forms节点下domain值为主域,如下:
<authentication mode="Forms"> <forms loginUrl="login.aspx" name=".ASPXAUTH" domain="joycode.com"/> </authentication>
即可实现同一主域不同子域站点之间共享登录了。

而对于不同主域的站点,实现方案相对就复杂多了。

打印 | 张贴于 2008-01-28 14:48:00 | Tag:Web技术

留言反馈

#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
登录时只保留登录服务器的cookie,然后就是通过相互跳转 Response.Redirect 实现登录了
2008-02-11 21:04:00 | [匿名用户:zzzzz]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
不同域名下只能够获取到除cookie以外的http包信息,也就是说实现单点登录要将认证信息告诉B域名只能靠HTTP包内的信息。
2008-01-31 20:34:00 | [匿名用户:xx]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
楼主的想法有道理,不能根本解决跨域sso的问题
2008-01-31 10:25:00 | [匿名用户:xjb]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
非常 有点意思,思路是非常不错的……
2008-01-30 13:47:00 | [匿名用户:51dwj]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
重定向 跨域 sso
post
get
均可
2008-01-30 01:11:00 | [匿名用户:Microshaoft]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
宝玉冒泡了。。。不容易、

发现这个问题讨论的n多,一直都没找到好的解决方案。
很难很诱人!
2008-01-29 18:52:00 | [匿名用户:5yplan]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
都是高人,我看的糊里糊涂的!向各位学习!
2008-01-29 17:04:00 | [匿名用户:solidworks]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
可以通过URL传递验证信息。

加密后,有时间限制的URL的QueryString还是比较安全的。

我个人觉得这种方式最点单。


以前发现方东兴那个播客中国使用明文的用户名和密码在QueryString中传递,也实现了单点登录。
2008-01-29 13:30:00 | [匿名用户:1111111111111111111111111111]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
@lovebanyi
感觉你没有说出你构建的关键点。如果加载了其他站点的js,本站点怎么就知道用户的登录状态了呢?
2008-01-29 12:57:00 | [匿名用户:辉郎]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
会复杂吗。
有一简单的方法就是加载一个其它站点的js脚本。这样就可以实现登录了。

这个是最主要的。。辅助的东西是密码的传输要放在哪里。 要不要先用http request一下对方的站点再加载登录。等。
very easy
.
2008-01-29 09:47:00 | [匿名用户:lovebanyi]
#理解ASP.NET 2.0中的单点登录 编辑
辉郎注:这是偶刚刚看到的一篇文章,感觉不错,所以忍不住翻译了过来,各位兄弟也可以看得方便一点。偶英文水平有限有不妥之处还望批评指正(不是有限是很烂,兄弟们手下留情哦~~~)。
2008-01-29 09:07:00 | [匿名用户:程序人生-123]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
贴一个ASP.NET1.1/2.0MachineKey 生成工具
http://www.aspxboy.com/mk/
2008-01-29 08:59:00 | [匿名用户:武眉博]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
楼上的说的对,学习了
2008-01-29 01:43:00 | [匿名用户:车托chetuo]
#【译文】理解ASP.NET 2.0中的单点登录 编辑
通常在你要实现ASP.NET web应用程序的身份验证时,你需要为你的每一个应用程序创建一个登录页面。想象一下,如果你有两个或者更多的互相关联的web应用程序,你可能希望通过某种机制为你的所有带关联的应用程序实现仅出现一次登录页面。这样,一旦你登录了一次,你就可以浏览所有的关联程序,而不再需要额外的登录了。单点登录(SSO)就是这样的访问控制机制,它允许一个用户通过一次验证就可以访问所有软件系统资源。
2008-01-28 21:25:00 | [匿名用户:辉郎]
#Asp.net 2.0中单点登录(SSO)的实现 编辑
Masoud的《UnderstandingSingleSign-OninASP.NET2.0》http://aspalliance.com/1545_Understanding_Single...
2008-01-28 17:46:00 | [匿名用户:shore]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
@leisang
不同主域靠cookie是肯定不行的。
微软的貌似跨域一般是不需要重新输入密码,有时候需要多半是由于秘钥过期了。
最典型的就是从msn上点新邮件图标直接进入hotmail,不需要重新登录
2008-01-28 17:16:00 | [匿名用户:宝玉]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
好长时间没看到宝玉大牛了
2008-01-28 16:56:00 | [匿名用户:留恋星空]
#回复: 对《Understanding Single Sign-On in ASP.NET 2.0》一文的补充 编辑
不同主域靠cookie估计是不行的。
微软的貌似跨域也要重新输入密码。
2008-01-28 16:36:00 | [匿名用户:leisang]
博客主人设置本博客不允许匿名用户发表言论,请登录后再试

Powered by: Joycode.MVC引擎 0.5.1.0