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,然後特地寫一篇出來讓其他人不要重蹈覆轍… :(

Pingback: 小隆網管日誌 » Blog Archive » Google Apps Education Edition 之二SSO原理篇