OASIS Security Services (SAML) TC 是早期 (2002 年的年底發表 SAML 1.0) 解決 Single sign-on 問題的公開標準之一,通訊的過程主要是以 XML 以及 XML 的變形作為資料傳遞的格式。因為是很早期就存在的標準架構,所以 Google Apps 的 SSO API 就是走 SAML。
拿 SAML 去查,應該都會查到 zxid 這個 library,不過這個 library 先天不良加上後天失調,問題實在太多,前景又不看好...
- 缺乏文件,tarball 裡面的 document 只有 README 能看 (http://zxid.org/README.zxid.html,另有 PDF 格式),不過整個文件最後面將近一半都是 Schema Grammars... 前面的部份以寫 Spec 的方法寫,所以閱讀上會蠻吃力的。同時缺乏 tutorial,想要用的人沒有辦法在短時間內知道最基本的語法。
- 沒有 mailing list,或是 Google Groups 之類的地方參與討論,這點其實比沒有 tutorial 還傷,因為有 mailing list 時可以在上面翻到一些程式碼,常見的問題也會在 mailing list 上看到。
所以我本來是打算乾脆自己從底層刻,在讀了 SAML 2.0 的一些資料,查了 Perl 的 CPAN 以後發現在 Perl 上面其實需要很多東西:
- W3C 的 XML Canonical (已經有 XML::Canonical 可以用)
- W3C 的 XML-Signature
- W3C 的 XML Encryption (XML Encryption 與 XML-Signature 有時被稱為 XMLSec,這兩個基礎建設在 CPAN 上沒有找到)
- SOAP (CPAN 上有 SOAP::Lite,不知道夠不夠用)
最後才是實做 SAML。(ouch)
所以我本來打算寫信請對方找 Python 的人來寫 Google Apps 的 SSO,因為我查到 Python 上有已經寫好的 XMLSec Library:PyXMLSec,這樣只要實做 SAML 2.0 的部份,工程應該會比較小。
於是我就開始找 Python 的 SAML 2.0 資料,結果翻到 Lasso,同時有 C、P*3 (PHP、Perl、Python)、SWIG 的支援,然後有 mailing list 可以查,有 Subversion Repository 可以翻 svn blame 查資料。
於是我又把信砍掉,繼續研究 SAML,然後特地寫一篇出來讓其他人不要重蹈覆轍... :(
Since ZXID is still very much work in progress, I am interested in
any feedback you may have. For example, what was easy, what was
difficult? What new features would you like to see? What IdP did
you use with it?
Cheers,
--Sampo