随笔-52  评论-330  文章-0  trackbacks-6
 

微软在过去的身份验证服务上,一直采用的Passport验证,但已经是N年前推出来的一个软件架构,当然也被软件界很多地方采用到,由于很多安全问题以及隐私问题,导致05eBayPassport分手,相继不少公司也与微软身份验证服务分道扬镳。为何会这样呢?这还得从Passport流程说起:

Passport 是基于 Cookie 的身份验证服务。使用 Passport 身份验证的示例事务对话的工作方式如下:

  1. 客户端向受到保护的资源(如 http://www.contoso.com/default.aspx)发出 HTTP GET 请求。
  2. 检查客户的 Cookie 是否具有现有的 Passport 身份验证票。如果站点找到有效的凭据,则站点对该客户进行身份验证。如果请求不包括有效的身份验证票,则服务器返回状态代码 302 并将客户重定向到 Passport 登录服务。响应在查询字符串中包含一个 URL,该 URL 被发送到 Passport 登录服务以便将客户定向回原始站点。
  3. 客户端执行重定向操作,再向 Passport 登录服务器发出 HTTP GET 请求,然后传输来自原始站点的查询字符串信息。
  4. Passport 登录服务器向客户提供登录窗体。
  5. 客户端填写窗体,并使用安全套接字层 (SSL) POST 发送回登录服务器。
  6. 登录服务器对用户进行身份验证并将客户重定向回原始 URL (http://www.contoso.com/default.aspx)。响应在查询字符串中包含一个加密的 Passport Cookie
  7. 客户遵循重定向并再次请求原始的受保护资源,这一次使用 Passport Cookie
  8. 起始服务器上的 PassportAuthenticationModule 会检测是否存在 Passport Cookie,并测试身份验证。如果成功,则该请求通过身份验证。

这个流程简单的绘制如下:


大家会发现,如果要使用
Passport服务,那么你的用户的用户凭据必须存储在Passport服务器上。这个是敏感的数据哦!如果微软有个什么内鬼的话……………..

另外,这种安全是基于的对称加密的tripleDES算法的,对称算法可以基于穷举破解的。当然还有HTTPS证书机制保证用户的凭证不会在传输时截获并解密。

基于现有的互联网发展情况来看,有很多类似这种机制,许多相对独立的网站,他们拥有各自的用户资源,和和各自的资源优势,都希望自己的用户能够享受其他网站的特殊服务,又能够让其他网站的用户消费自己的特殊服务。传统的SSO,就是这样实现的。比如互联星空的,SP的服务都是受保护资源,用户在登录了互联星空后,才可以获得验证票据,在各个接入的SP内消费。给用户带来的好处就是只要登录互联星空,就能消费N多的SP服务。

当然我们举的例子是互联星空和SP的模型,他们之间只能是强弱之间的对话,没有挣扎的能力。那如果是谷歌和百度之间用户之间需要交流怎么办?到底是 把百度的用户名密码存储到谷歌上,还是将谷歌的用户名密码存储到百度上呢???

敬请期待下篇:

把百度和谷歌和谐起来!

posted on 2008-04-23 17:29 PerfectDesign 阅读(2426) 评论(17)  编辑 收藏

评论:
#1楼  2008-04-23 17:41 | 王孟军!      
SSO,这东西,分主域,子域,可以介绍得更细致些
  回复  引用  查看    
#2楼 [楼主] 2008-04-23 17:48 | PerfectDesign      

主要是想说传统的SSO的弊端。
  回复  引用  查看    
#3楼  2008-04-23 19:35 | Yannic Yang      
最后那句话可真和谐
其实ms本意是想做一个中立的身份验证机构,可惜人家不信任他
  回复  引用  查看    
#4楼  2008-04-23 19:37 | Yannic Yang      
最后那句话可真和谐
其实ms本意是想做一个中立的身份验证机构,可惜人家不信任他
  回复  引用  查看    
#5楼  2008-04-23 19:55 | G yc {Son of VB.NET}      
以为有很多内容呢,结果看了下,内容很少

(没有其他意思, 估计是自己眼睛看错了)


PS: 认证这个话题本身很大,不是一言两语也可以说清的~~不过偶还是很关注的
  回复  引用  查看    
#6楼  2008-04-23 21:39 | 膘汉      
标题太大,内容太少。

我现在在用Live ID,类似Passport,可以实现SSO。
  回复  引用  查看    
#7楼  2008-04-23 22:11 | Anders Liu      
嗯,现在已经是Live ID了。

但问题是,使用Live ID很难进行本机调试,谁有好的方法请共享~
  回复  引用  查看    
#8楼 [楼主] 2008-04-23 22:19 | PerfectDesign      
wcf
这个就内置Federation支持
  回复  引用  查看    
#9楼  2008-04-23 22:30 | king2003 [未注册用户]
不注册也能回复,我以为有方案了呢
  回复  引用    
#10楼 [楼主] 2008-04-23 22:35 | PerfectDesign      
马上写好

  回复  引用  查看    
#11楼 [楼主] 2008-04-23 23:56 | PerfectDesign      
@Anders Liu
自己多做几个host可以做到吗?
  回复  引用  查看    
#12楼  2008-04-24 08:51 | 亦续缘      
也没具体给出个方案出来,还以为会有什么好的方案呢,晕.
  回复  引用  查看    
#13楼 [楼主] 2008-04-24 09:53 | PerfectDesign      
@亦续缘
下篇已出,有解决方案
  回复  引用  查看    
#14楼  2008-04-24 10:39 | 镜涛      
--引用--------------------------------------------------
Yannic Yang: 最后那句话可真和谐
其实ms本意是想做一个中立的身份验证机构,可惜人家不信任他
--------------------------------------------------------

  回复  引用  查看    
#15楼  2008-04-24 14:40 | Anders Liu      
@PerfectDesign
可以是可以,但需要将自己本机暴露在公网上,这需要安装花生壳,并调整路由器。最后vs还得启用远程调试。
  回复  引用  查看    
#16楼  2008-07-01 11:05 | guojin      
请问下文呢?只写了一,还没有出来二?
  回复  引用  查看    
#17楼  2008-07-01 11:09 | guojin      
不好意思,看到二了。不过还很粗略,写得不详细啊
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-08-09 11:10 编辑过