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 クラスの実装を中心に変更しています:
- SAML レスポンスの生成に使用されているテンプレート SamlResponseTemplate.xml を、あらかじめ Canonical XML の形式に正規化しておく
- javax.xml.crypto.dsig を使用している XmlDigitalSigner クラスの実装を変更し、XML デジタル署名を手動で行う
- 上記 1. によりすでに Canonical XML 形式になっている SAML レスポンスの SHA-1 ハッシュ値を、java.security.MessageDigest クラスを使用して計算し、<DigestValue> 要素に直接埋め込む
- <DigestValue> 要素を埋め込むための <SignedInfo> 要素もあらかじめ Canonical XML 形式で用意しておく
- java.security.Signature クラスを使用して <SignedInfo> のSHA1-DSA 署名を計算し、値を <SignatureValue> 要素に直接埋め込む
- テンプレートが含まれている templates フォルダ、署名用の秘密鍵が含まれている keys フォルダを、WEB-INF の下に移動
- 同梱の Apache Commons Codec を version 1.4 に更新
- 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
Copyright © 2003-2011 EdelSoft, All Rights Reserved.
Contact: