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

firefox extension: refcontrol

最近用google reader读一些blog。其中sina,baidu这两个空间的图片全部做了referrer检查,用咱们中文说,叫做“防止盗链”。举例来说,baidu和sina的图片在google reader中会显示成下面这个样子。 (XXX: 好像我这里又好了?) 这是非常SB的一件事情,在看一些blog的时候还真不得不打开某些网页去看,很麻烦。于是就想到了无所不能的firefox插件,搜了一下,果然有人做了,叫做refControl。试了一下,的确很不错。现在这两个图片都能显示了……没有subscribe任何sohu的blog,不知道sohu有没有这个问题。 这个东西也就是简单的篡改refer的URL。只要hiphotos.baidu.com和album.sina.com.cn都Forge一下就可以了。。

八月 19, 2007 · Shawn Ma

我的firefox插件们

firefox的确是个很不错的浏览器,至少,他不支持activeX,所以安全了一些……现在那些网站开发的所谓安全控件,有时候却还同时给别人开了后门,还是很恐怖的。 现在firefox用的越来越顺手了,插件是少不了的。但是它的毛病是,插件多了,firefox还是挺吃内存的,而且启动超慢——这点ie快很多。。 于是,我只装几个常用的插件,如下: ABP (adblock plus) 0.7.5.1. 这个东西很好,所有的广告统统block掉,甚至文字广告。他的原理主要是URL过滤,支持regular expr. 支持css selector。比如这个规则可以干掉sina的嵌入广告:sina.com.cn#*(id^=PublicRelation) Drag De Go 0.2.5. 让firefox支持手势,拖拉一个url可以打开一个tab,拖拉一个文字自动google搜索。差不多了。这个是maxthon养成的习惯,所以要装。哦,它还可以快速的保存图片…咳咳。 Stylish 0.5.2 乖乖,这个更厉害了,可以写一个css override页面的style,这样,可以让一些不好看的网页好看起来。当然,也可以让一些广告元素消失(display:none)。有人就用这个把google页面变成黑的,也满酷的……我主要用来调整一些难看的网页,比如我们公司的bug tracking系统,我给他写了如下的css: @-moz-document domain(“bugs.bea.com”) { TR[bgcolor=”#ffffdd”] {background-color:#FFdd99 !important } TR[bgcolor=”#aaaaaa”] {background-color:#bbFFff !important } TR[bgcolor=”#dddddd”] {background-color:#aaFFaa !important } table[border=”1″] { border: 1px solid #C0C0C0!important ; border-collapse: collapse !important; } TH[bgcolor=”#cccccc”] { font: bold 10px tahoma!important; background-color: #ddddaa !important } DIV[align=”center”][class=”header”]{background-color:#ddddaa !important} } 其他的就没有了,偶尔用一下DOM inspector,是用来找到某一个元素,并找出其selector的。。。 TMP这样的tab管理工具似乎没啥用了,所以也不装了。。。

八月 16, 2007 · Shawn Ma

gmail mobile and e680

I have an GPRS plan with 10M data per month, 5RMB, and tried a few new things with my e680i. Two major things: one is google reader, the other is gmail. Gmail is accessible through mobile phone at http://m.gmail.com. However, they also provide a Java version gmail client, which is an MIDP 2.0 application. I downloaded one, and tried it with my little e680i (flashed with e680g). The application accesses the network through HTTPS. I firstly tried cmwap connection, but failed. Then I tried cmnet, which is direct internet connection. This time it complains that no certificates available for authentication the server. That is very odd. I checked gmail mobile help. They say the client requires a certificate from VeriSign root CA. Then I goto the browser configuration in e680. Surprisely, I found 4 root certificate there, but 3 named “CFCA xxx”, and one from “Jettronic”. Three CFCA are CA certificates from some organization in China, and the last one is from a company from Shanghai. There is no certificate from VeriSign or Thawte. This means, the browser will never be able to access any https pages over the internet. The resolution is straightforward, I exported the certificate from my IE. Internet Explorer->Tools->Options->Content->click Certificates->select Trusted Root CA tab->find the certificate named “Class 3 Public Primary Certification Authority” and serial # 70:BA:E4:1D:10:D9:29:34:B6:38:CA:7B:03:CC:BA:BF ->click Export->Next->DER encoded binary X509->select file name->finish->copy the file to the phone->browser->settings->SSL certificates->Insert Ok. I now can run the gmail java app on the mobile. It seems to be a little faster than the web version…I’m also surprised by its GUI, seems they do the GUI using CustomItem directly, they even make their own menus!

七月 19, 2007 · Shawn Ma

哼!

本来想写恨来着。。。因为刚才写了一半的”unix tools for windows”,没想到这个机器居然出错,把我得IE crash掉了,全白写了。 刚才写的是,为了不装cygwin, mks tool kit那么大的东西来模拟unix的环境,找了一个简单的toolset,都是native windows port, only depends on microsoft C runtime library. 它的内容还是挺丰富的,基本够用了: bzip diff fileutils(cp dd du ls mkdir mv rm touch) find gawk grep gzip sed shellutils(basename date echo env hostname id nohup printf pwd seq sleep tee test who) tar textutils(cat cksum cut fmt md5sum od sort sum tail uniq wc head) unrar wget 就差一个bash了!

六月 26, 2007 · Shawn Ma

很郁闷的一天

今天花了一天时间折腾一个事情,但是没有成功,感觉很不爽。 给别人买了一个IBM笔记本,考虑到使用者将来的水平有限,可能时不时需要重装,但是那么多驱动肯定把人给搞死了。联想的一键恢复(Rescue&Recovery)做的很强大,但是比较慢,比ghost慢好多,恢复过程还要重启n次。而且好像还给硬盘装很多很多的垃圾。于是就琢磨自己做个简单一点的一键恢复。 最简单的就是ghost了,网上有很多可以下载的现成的东西。不过这个机器不能从U盘boot,我唯一的一个可以boot的光盘它不认。后来就琢磨模仿IBM/Lenovo做的,做在硬盘上。网上有很多这么做的,叫做”f11″一键恢复。用的是IBM以前老的一个东西,简单的说叫bmgr。其实就是一个boot manager,他占据MBR的引导区,引导的时候如果你按一下F11,他就把一个LABEL是IBM_SERVICE的盘设为活动的,然后用那个盘启动。那个盘里装个dos,搞个config.sys, autoexec.bat,就可以很容易的备份、恢复了。 遇到的问题首先是那个分区不能在1024柱面以外。不知道时不时那个bootloader的问题。后来在C的前面分了一个区,把dos什么的弄上去,装bgmr(bmgr?)。终于可以boot进那个dos分区了。问题是,重启之后,那个bootloader很傻,不把dos分区设为非活动的,于是,就进不了原有的windows了!我fdisk把windows分区设为活动,结果windows还是进不了,因为boot.ini里面的分区不对了,应该是multi(0)….partition(2)了,因为我在前面用PQMagic加了一个分区! 这下麻烦了,而且由于MBR被改了,ThinkVantage那个蓝键也进不了R&R了,windows都没法装了。试着用windows xp的盘启动,蓝屏——大概是bootloader有问题,要求扫描病毒。。什么玩意。还好,最后找了一个vista,进入rescue console,notepad boot.ini,搞定。 windows回来了,但是恢复还没搞定,主要是那个不能自动改成active partition. 网上说可以用pqboot来改,但是我很怀疑。另外,这个分区还要被隐藏,不能被windows看到。。真麻烦。最后又去试了bmgr32,新版的bootloader,这回倒好,R&R恢复了,蓝键可以进原版的Lenovo恢复程序,却无法引导进我的IBM_SERVICE那个盘的dos,死活都进不去。 无奈的放弃了,还是想办法光驱启动ghost吧。。嘿嘿。。。 结论是,我真是一个爱折腾的人啊。。。

六月 23, 2007 · Shawn Ma

跟Acrobat说再见

我觉得Acrobat reader和Acrobat是很奇怪的两个软件,特别的巨大,但是还不能象word那样编辑文件,不知道它哪里好了。而且启动起来很慢。哦,可能acrobat最大的用途是在pdf文件上画一些form吧。另外还有一个打印机,可以把word,excel打印为pdf。 免费替代品: Foxit reader:非常的快,启动起来就跟打开一个notepad一样。而且很小,很绿色,不用安装,只有一个exe文件。如果要读东亚地区的pdf,就要再当一个插件就好了。 PDFCreator: Open source的PDF生成器,装完了之后就在你的系统里多一个打印机。关键是,他是免费的,而且不像acrobat那么巨大。。。 我基本上已经不用acrobat了。。。

四月 19, 2007 · Shawn Ma

RunOnce

昨晚老婆拿回来他们公司的一个电脑,说是买了一个联通的的CDMA卡装不上驱动,但是在联通那里就是好的,在我们家的另一个电脑上也可以装上。 我吃完饭就开始折腾它。那是联想的一个PCMCIA卡。最先是怀疑这个机器的PCMCIA槽是不是没有驱动,因为的确不插卡的时候也有一个unknow device。但是松下的网站上根本没有PCMCIA的驱动,也没有chipset的驱动。后来发现这是一个hotkey的设备,就当了一个驱动下来,准备装上。有趣的是,这个设备居然安装不上,快安装完了的时候报错:2: The system cannot find the file specified. 很奇怪,反复安装了几遍,都不行。 后来再去装卡的驱动,联想自带的驱动安装程序比较有意思,插入卡之后,明显看到一些窗口一闪,然后就不见了,系统发出错误的声音,应该是驱动没有被sign的窗口。安装失败它也不报错,好在它还把inf文件放在安装好的目录底下了,这时候windows也能认出那个设备名,叫Lenovo,但是驱动没有装好。手动安装,指定inf文件,果然出没有sign的警告,忽略,到最后一步的时候,居然出跟hotkey那个一样的错误:文件找不到。 有趣的是,出了错误之后,那个设备到是work了,不再有一个问号,联想的CDMA1x拨号程序也能找到这个设备,但是连不上,而且重启之后这个设备又出问题了。 既然文件找不到,我就看看它要找哪个文件——事实证明,这是走了弯路,这个驱动在别的地方是好的,而且松下的hotkey驱动应该也没有问题的。我下了Mark的filemon (File Monitor)程序,来看看它到底要找那个文件。但是在那些NOT FOUND的文件中,却没有发现太多有意义的东西。我也试图把需要的sys文件,dll文件都多复制几份,但是都没有成功。 于是我走了更远的弯路,因为我发现windows安装驱动的程序(rundll32 newdev.dll)会在%windir%下,一般也就是c:\windows下,写一个setupapi.log,里面有详细的如何处理inf文件的记录。察看之。发现inf文件里描述的文件都找到了,并且都已经成功复制了,但是安装快结束的时候,居然就除了那个system cannot find the file specified的错误。hotkey的安装也是一样的。 黔驴技穷,google之,用”install driver system cannot find he file specified”去搜,翻了一翻,还真有人遇到过,他的说法是,HKLM\software\microsoft\windows\currentversion\下,runonce这个键被人给删了,可能是某个特傻缺的uninstaller干的,然而安装驱动的程序往往要在这个RunOnce下面写点东西,并且Open这个registry key不成功的时候,返回值也是2,就是cannot find the file! 解决方法很简单,在那个地方建立一个结点,叫做RunOnce就好了。我一看,果然我那个机器没有这个key!!果然,加上之后,hotkey和卡的驱动都很容易装上了。 最后那个拨号还是不work,我注意到那个卡应该是装两个驱动的,另外一个是一个modem,应该是这个设备没有被安装上,而且不是PnP的。再运行一次联想的安装程序,嗯,搞定。 结论是,知之为知之,不知google之啊! PS. 如果我不用filemon,而是用更NB的procmon (process monitor)的话,我应该也能自己发现那个RunOnce的问题。Mark Russinovich的确写了一些好tool的。

四月 11, 2007 · Shawn Ma