2008年5月14日星期三

[Tips]OpenID and SSO

by axis
2008-05-14
http://www.ph4nt0m.org

OpenID技术在国外已经很火了,在国内在刚刚起步。其实OpenID也是一个SSO(单点登录)的思想。目前随着web2.0技术的发展,网站之间交互越来越多,认证也即将迎来Identity2.0时代。OpenID就是其代表产物。

在Identity2.0的概念里,认证已经从网站通过用户名和密码来认证用户(目录查询类型的认证),转移为由第三方提供者来进行认证。也就是说,到别的第三方机构去认证该用户,网站本身不需要关心用户identity管理、用户认证。关于Identity2.0的更多资料,大家可以访问http://identity20.com这个网站,作者有一个非常精彩的演讲。

OpenID由provider生成一个link,通过这个link,网站对该用户进行认证。这个link可以是一次性的。这里需要注意的是link如果被截获到可能会发生hijacking攻击。所以通道加密往往会起到很重要的作用。还有一些csrf的问题也是在设计系统时需要关心的,对抗方法是加上anti-csrf-token。

OpenID的出现,让用户只需要记住一个用户名和密码(在provider上的),就能够登录所有支持该OpenID provider的网站,大大提高了用户体验。对于网站来说,他们不需要去管理用户的登录信息,减少认证这个环节,大大节约了成本,而且安全性还提高了。

为什么说安全性提高了呢?因为风险被集中化了。风险集中到了OpenID provider身上,如果OpenID出现安全风险导致帐户被窃取,那么所有网站都能被登录。但是这样做也是有好处的。SSO的优点在于可以集中最大精力来保护重要的登录入口。比如可以使用双因素认证(RSA令牌,USB Key、客户端证书等技术)。武侠小说里经常描述最强的一点就是最弱的一点,SSO很深刻的反应了这种情况。

其他SSO技术有的是基于cookie的,但是我认为这种放在cookie里的认证还是存在一定风险的,cookie本身就不是个什么好玩意,cookie让跨站和浏览器漏洞(比如跨域的)有了用武之地。而OpenID技术本身不依赖于cookie,只要设计的好完全能杜绝许多威胁。

目前OpenID面临的最大风险可能是钓鱼(对于面对公众的openid provider来说,内部系统无此威胁)。但是通过双因素认证,不依赖于密码验证用户身份,或者使用sign seal技术(主动识别真实网站),也能规避钓鱼的风险。

还有些SSO技术是基于安全协议的,不过没有深入研究,希望有道友能够补充。

值得一提的是,在国内有家叫onedoor.cn的网站,它不光支持openid技术,同时还支持保存密码,然后帮助用户去sso其他网站。从网站的角度来说,这样的做法是正确的。但是从安全工作者的角度来说,不建议客户这样做,将密码交给第三方网站保存不是一个明智的做法。

总的来说,Identity2.0是优于目前的登录、认证技术的,在web2.0的发展中,必然会发挥越来越大的影响。

关于openid更多的资料,可以访问 http://openid.net
对于国内用户,想体验openid技术最方便的就是通过yahoo id登录flickr! , 当然需要先在yahoo上开通openid,不过有向导引导操作,非常简单。