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

上文介绍了微软的Passport和传统的SSO在软件架构上的失败,都需要将用户名密码存储到一个地方,那样谁都不愿意,除非一方特别强势,不然谷歌和百度是谁都不愿意妥协的。

那么有什么办法来解决这个用户凭证的存储问题呢?

       先来看看欧洲各大申根国协定。协议规定了单一的签证政策,即凡外籍人士持有任何一个申根会员国核发的有效入境签证,可以多次进出其会员国,而不需另外申请签证。因此,前往欧洲各申根国旅行,只需获得其中一国的签证即可。基于SAML的Federation身份认证类似于申根签证,在Federation联盟的内部,每个成员签发的SAML断言都能够被其他联盟成员所信任,并且能够基于授权模式的保护资源资源访问。

再简单介绍一下SAML,他是Security Assertion Markup Language的缩写,安全断言标记语言。也是WS*规范的组成部分。

他由断言方和信任方以及用户身份主题组成。用户持有断言方的凭据向信任方报到,信任方基于证书签名,验证此用户持有的断言是否正确,而且是由断言方签署的断言。

举例百度空间用户想使用谷歌受保护的Gmail,那么他们之间怎么建立一个信任关系呢?

我用我不擅长的Visio画了序列图,大家不要见笑了。


其中的几个关键步骤:

第五步:用户在百度登录成功后百度颁发一个SAML安全令牌,这个令牌是使用的自己的私钥在摘要上签名的,那么能证明这个SAML就是百度签发的。

第七步:谷歌认证中心在接到百度颁发给用户的安全令牌后,使用百度的公钥解密摘要,并对比摘要是否一致,验证如果一致,那么就能确保这个断言是百度颁发的,并且信任这个断言。

(当然在这个流程设计中,谷歌的认证中心和Gmail可以是一个,而不必跳转浏览器。另外谷歌内部也可以不在内部维护一个安全令牌。)

百度的用户凭证存储在百度上,但是却能够访问谷歌的受保护资源,这样,就能把百度和谷歌的用户和谐了起来!




名词解释:

摘要:

即对数据进行哈希,哈希后字节量明显减少。

签名:

使用自己的私钥给数据加密,那么只要对方能够拿你的公钥解开,那么就证明是你的,因为没有人能获得你的私钥。

posted on 2008-04-23 22:46 PerfectDesign 阅读(2303) 评论(12)  编辑 收藏

评论:
#1楼  2008-04-23 23:02 | justforkim-- [未注册用户]
原理是用PKI体系代替认证服务器
  回复  引用    
#2楼  2008-04-23 23:16 | JustForKim      
有几个问题:
1、注册时,如何保证在SAML成员网站中,同一用户名都可以同时注册成功。
2、如果百度要偷看谷歌用户的资料,是不是捏造一个百度SAML安全令牌就可以使用谷歌用户身份登录,窃取谷歌用户资料。
  回复  引用  查看    
#3楼  2008-04-23 23:31 | Yannic Yang      
@JustForKim
应该不存在你说的问题,每用户id可以假想成user@baidu这样,不可能重复了

@lz
欧洲签证的比喻很形象,呵呵
  回复  引用  查看    
#4楼 [楼主] 2008-04-23 23:32 | PerfectDesign      
@JustForKim
在这个示例中,谷歌内部维护一个GUID来与SAML众携带身份信息一一对应,比如perfectdesign@baidu.com,这样,就知道这个用户来自百度。
对于第二个问题,因为是基于的签名,所以没人知道百度的私钥,所以其他人是无法来伪造百度签名的,除非他的私钥已经被泄露,那么这个假设已经动摇PKI的体系了。
  回复  引用  查看    
#5楼 [楼主] 2008-04-23 23:33 | PerfectDesign      
@Yannic Yang
哈,居然比我抢先一步
  回复  引用  查看    
#6楼  2008-04-24 05:20 | 颓废边缘      
hmm...貌似和sso仅仅是很少的区别 那就是一个是分布式存储用户信息互相通过url或者其它方式传递认证令牌 另一个是集中在一个中心认证 这种东西我原来弄过 还是有价值的
  回复  引用  查看    
#7楼  2008-04-24 08:22 | 奡 [未注册用户]
时序图还是有个问题。
为什么Gmail在发现用户没有携带安全令牌之后,要将用户重定向到百度,而不是重定向到Google呢?在登录之前,没有任何凭证证明用户身份。
  回复  引用    
#8楼  2008-04-24 10:18 | 镜涛      
学习
  回复  引用  查看    
#9楼  2008-04-24 16:08 | 无常      
google发现用户没有令牌时为什么能重定向到百度认证中心呢,
或者说googel怎么百度认证中心有用户的认证信息?
  回复  引用  查看    
#10楼 [楼主] 2008-04-24 16:16 | PerfectDesign      
@奡
@无常
带个查询字符串就是,这个步骤叫做领域发现,realm discovery
或者有个UI来显式确定用户归属哪个地方
  回复  引用  查看    
#11楼  2008-04-24 17:08 | snowwolflibo      
@奡
为什么Gmail在发现用户没有携带安全令牌之后,要将用户重定向到百度,而不是重定向到Google呢?在登录之前,没有任何凭证证明用户身份。

Gmail在发现用户没有携带安全令牌之后,应该是返回一个登录页面,该页面上有百度与谷歌的登录框,由用户选吧?
如果用户曾经登录过百度,可以通过cookie直接认证通过
  回复  引用  查看    
#12楼  2008-04-29 20:56 | JustForKim      
@snowwolflibo
如果用户曾经登录过百度,可以通过cookie直接认证通过


你的意思是,google要用js查看有无baidu的cookie,如有直接认证通过?
  回复  引用  查看    

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