EdelSoft
     Home     |     Softwares     |     Documents     |     Links     
Home > Softwares > samltool for Google App Engine
Web-based Reference Implementation of SAML-based SSO for Google Apps (samltool)
Google Apps for Business は、SAML 2.0 を使用したシングルサインオン (SSO) に対応しています。SAML により、Google Apps ログインの認証部分を別のシステムに委譲することができ、他の Web アプリケーションとの SSO や、アクセス制御の仕組みを構築できます。

Google は、SAML ベースの SSO を学習するためのサンプルプログラムを samltool として提供しています。samltool には Java, C#, PHP の各言語版がありますが、Java 版は通常の Web アプリケーションサーバー上で動作するものの、Google App Engine 上で動作させることができません。

参考情報:
samltool の C# 版は、少し(鍵をファイルシステムから読み込んでいる箇所を)変更するだけで、Windows Azure 上でそのまま動作させることができます。
samltool for Google App Engine
Java 版の samltool が Google App Engine で動作しない理由は明らかで、Google App Engine では使用できないクラスが使われているためです。

samltool では、SAML に準拠するための XML 署名部分に、javax.xml.crypto.dsig パッケージのクラスが使用されています。このパッケージのクラスは Google App Engine のホワイトリストに含まれていないため、Google App Engine では使用できません。

よって、これらのクラスを使用しないよう変更すれば、samltool を Google App Engine 上で動作させることができるということになります。


最終的に、Google App Engine で動作させるために行った変更点は、以下のとおりです。XML 署名を処理している XmlDigitalSigner クラスの実装を中心に変更しています:
  1. SAML レスポンスの生成に使用されているテンプレート SamlResponseTemplate.xml を、あらかじめ Canonical XML の形式に正規化しておく
  2. javax.xml.crypto.dsig を使用している XmlDigitalSigner クラスの実装を変更し、XML デジタル署名を手動で行う
  3. テンプレートが含まれている templates フォルダ、署名用の秘密鍵が含まれている keys フォルダを、WEB-INF の下に移動
  4. 同梱の Apache Commons Codec を version 1.4 に更新
  5. xerces.jar を同梱
java.security パッケージを使用した公開鍵暗号化、デジタル署名を Google App Engine で利用できなかったとしたら、おそらく移植はもっと困難だったはずです。幸い、これらのクラスはホワイトリストに含まれており、利用可能であるため、XML 署名処理を置き換えれば移植は比較的簡単です。
Download
Demo
デプロイ済みの samltool for Google App Engine に、samltool-j.appspot.com からアクセスできます。

[Generate SAML Request], [Submit AuthnRequest], [Generate SAML Response], [Submit SAML Response] 各ボタンを順にクリックしていくと、Google の用意している SSO デモ用のドメイン psosamldemo.net にログインできるはずです。

(samltool は SAML の学習用サンプルであることを忘れないでください。個別のユーザー認証やアクセス制御の実際的な仕組みは、実装されていません)
Resources
Home > Softwares > samltool for Google App Engine