OpenID Debates

Open ID 是个很有意思的东西。它号称是一个分布式的身份认证系统。任何一个网站都可以做一个Identity provider。也就是说,用户只要在一个Identity provider那里注册了,那么在任何一个service provider那里就都可以sso了。具体的说,好比我在openid.cn注册了一个id,再如果天下所有的网站、论坛、blog都支持openid登录,那么我再也不用在任何地方注册第二次了。其实跟windows live id差不多,不过WLID必须微软来管,open id谁都可以做用户认证管理的。比如我就注册了一个id是:http://shawnma.openid.cn 然后网上就有很多的debate,基本上来说,就是这个东西非常不安全。 Eugene and Vlad Tsyrklevitch发表了一个白皮书,论证了这个东西是如何的有缺陷。 Stefan Brands发表了一个巨长的blog,来批判Open ID。 David Recordon就声称Open ID 2.0会解决这些所有问题。 Bob Blakley就开始问,Open ID到底要解决什么问题?他看起来Open ID是先有解决方案,再来寻找problem -_- Mike Neuenschwander说,Open ID缺少一个Trust model。 嗯,看起来都挺有意思的。其实用的技术也都很老了……

九月 20, 2007 · Shawn Ma

Google SAML implementation

看了一下GOOGLE的SAML实现,大跌眼镜,他不是像Windows Live ID一样提供身份信息的,相反,他是google application作为service provider,接收3rdparty传过来的saml assertion的。google现在卖他们的gmail等服务,其实就是以前做得企业邮箱,当然,还有gtalk,google doc之类的程序,这些东西加起来,卖50$一个账号。这也挺好的,我老婆这样的单位就不需要买一个服务器做邮箱了,还老维护,还老当机。 话说回来,Google把这些服务卖给一个公司之后,可以接收这个公司传给google的saml2的token,这样,google可以不维护身份信息,也不维护密码。要是windows live id可以提供saml2 token的话,他们两个就可以连起来了,哈哈。 当然,要一个公司实现一个saml2 token的producer,也不容易,google提供了sample。我诧异于这个sample的实现。他使用了一个最简单的xml生成办法,文本替换。做了一个template文件,然后替换其中的某些特殊符号,就生成了xml文档。当然,xml文档的签名没法这么做,只能programmatically的实现。这个很像hydra以前用php实现移动的的web service接口的方法,也是类似的。xml parsing也只是字符串搜索,嗯,其实,这样只要结果是对的,who cares? 哪天用weblogic做一个identity provider,看看能不能跟google连起来。不过似乎要一个域名,也挺麻烦。

九月 19, 2007 · Shawn Ma

Windows Live ID internals

Windows Live ID(WLID)本身是一个identity provider,他负责维护用户的用户名,密码。 作为一个想使用WLID的网站,需要首先注册成为Windows Live application。注册的时候,你先需要有一个WLID! 注册的目标是双方需要有一个PSK——preshared key(WLID叫Secret Key)。这个key是用来验证WLID传回来的token的。注册的同时要求给WLID提供一个Return URL,当用户登录成功,或者logout的时候,WLID会调用这个页面,并且加上一些parameter,其中一个重要的就是stoken,这个参数含有一个WLID传回来的用户相关信息。 我也注册了一个, return URL=http://sma01:8080/wlid/return.jsp secret key=thisisaverylongkey Application ID=<span>00163FFF8000412B</span> WLID认证成功之后,他就redirect用户到Return URL,相当于SAML的ACS service。另外还要加上token之类的参数。 WLID给用户浏览器返回一个post form,内容如下 <html> <head> <noscript> JavaScript required to sign in <meta http-equiv="Refresh" content="0; URL=https://login.live.com/jsDisabled.srf?lc=1033&#8243;/> </noscript> <title>Continue</title> <script type="text/javascript"> function OnBack(){} function DoSubmit(){var subt=false;if(!subt){subt=true;document.fmHF.submit();}} </script> </head> <body onload="javascript:DoSubmit();"> <form name="fmHF" id="fmHF" action="<a href="http://sma01:8080/webauth/sample/webauth-handler.jsp">http://sma01:8080/webauth/sample/webauth-handler.jsp</a>" method="post" target="_top"> <input type="hidden" name="stoken" id="stoken" value="DvJ%2BtIPK9bn%2FKlG7PjSB7FNPFEzlX5g9HtHcBGGv2r2h5s1VsnzoRlI7GnSRNK%2Bo3pn87YJCJnTi1jtKgXEh3TLxASGCSt3Okju7MK51VDXz4KGSemv%2BARYN4WJ33FIoHoZ3aVvF19wsNq2YRnM8npmfgVh5ZDVtu%2FXA9FaUqKLRAsOR377dMpDXEWSOrsRQBsmRUy7dZPdZSW4F9%2F%2Fyow%3D%3D"> <input type="hidden" name="action" id="action" value="login"> </form> </body> </html> 再看看那个token的具体内容。token首先是base64编码的byte array。前16个字节是IV,剩下来的是加密的内容。加密是用的AES,准确的说,AES/CBC/PKCS5Padding。解密之后的东西居然可以直接得到一个string,看来是iso-8859-1字符集的。顺便说一下,那个decryption key是PSK加上一个前缀"ENCRYPTION",然后做SHA-256,获得的。没有使用PBE的PBRDF2算法,呵呵,让我平衡的很多。我自己做的也只是用SHA-1 hash两次,不过SHA-256可以一次获得16byte的key,的确很省事。 ...

九月 19, 2007 · Shawn Ma

Windows Live ID and identity federation

晚上心血来潮,想起来要是做web sso似乎只有saml这个东西,就想看看微软的passport,Google,以及open ID都是怎么实现的,应该用的不是saml吧? 随便search了一下,发现windows live id刚刚发布了SDK,里面有perl,java,ruby等等的的实现,java的实现居然只有两个class,其中一个还是base64的code,很有意思,今天没时间了,改天研究一下。原来好像passport使用kerberos的,似乎那段代码很简单,没有kerberos的迹象啊。 (忍不了maxthon了,随便敲几个字就这么慢。。。杀。o, 又试了试ie…也是有问题,狂吃cpu。去死吧。。。难道是这个控件跟ie6合不来?嗯,转换到html格式下就好了。。。那就html吧。) 其他的几个发现: 这位作者做了一些有意思的东西,并且介绍了ADFS(Active Directory Federation Service)。没时间仔细看,先记下来。 ADFS好像用的是WS-Federation,这个很奇怪,WS-F不是只能给WS用么?然后他们用的token似乎又是saml。 波音公司在做identity federation的deployment。他们说,原因有三,第一个是user experience好,第二个是省钱,每帐号每月省500刀,这个我想不明白。第三个,是帐号有一个集中管理的地方,比如某人从boeing公司辞职了,那么他在其他partner那里的帐号也就失效了。波音的方案提供商好像是Ping identity,一个我觉得不错的小公司,有一些值得学习的地方。 google也在提供帐号服务,好像是提供saml接口的,哪天看看。 Open ID呢? Liberty Alliance的saml 2.0网页上居然没有CA的site minder,有意思。。。当然,也没有weblogic server。。。But I’m very interested with interop with those! espcially, google saml2 impl. 睡觉了,有时候,我很赞同我老婆的一个观点,觉得睡觉真无聊,人要是可以不睡觉多好呢。。。

九月 18, 2007 · Shawn Ma