OpenSSO と GoogleApps とのSAMLでのシングルサインオン連携を解説します。
下記、設定はOpenSSO 8.0のものとなります。
概要
OpenSSO はオープンソースのシングルサインオン製品です。
ウェブシングルサインオンの機能はもちろん、SAMLやWS-Federationといった、企業間・組織間でセキュアに認証連携や属性交換を行なうためのフェデレーションプロトコルにも対応しています。
ここでは、SAML2.0 によるGooleAppsとのシングルサインオン連携について解説します。
前提条件
- OpenSSOがインストールされて、初期設定がされている。。
OpenSSO側(アイデンティティプロバイダ側)の設定
- OpenSSOの管理画面にログインします。

- 初期画面が表示されます。OpenSSOでは、管理者が容易に設定作業を実施できるように、よくおこなうタスクは初期画面からすぐ実施できるようになっています。

- ホストアイデンティティプロバイダの作成 をクリックします。ここでは OpenSSOがアイデンティティプロバイダとして動作するために必要な設定を行ないます。

- 下記のように情報を入力します。

- ホストアイデンティティプロバイダが作成されました。この画面ではホストアイデンティティプロバイダを作成した後によく行なう設定作業が表示されています。このように OpenSSO では随所にシステム管理者の負荷を下げる(設定作業を容易に行なえるようにする)工夫が施されています。
リモートサービスプロバイダを登録する の文中にある、 サービスプロバイダを登録する リンクをクリックします。

- サービスプロバイダの登録で必要となる xml ファイルを作成します。ここで、サービスプロバイダとはGoogleAppsになります。(サービスの提供者という意味ですね。)サービスプロバイダであるGoogleAppsのSAMLに関する設定を、 アイデンティティプロバイダであるOpenSSO側に登録するわけです。XMLファイルを読み込みますので、google.xml というファイルを作成します。

- 入力する情報は、GoogleのWebサイトにサンプルが記載されていますので、これを利用します。

- google.xml ファイルにコピーした内容を貼り付けて、編集して保存します。

- リモートサービスプロバイダの作成画面に戻ります。 メタデータはどこに存在しますか? のラジオボタンで ファイル を選択します。

- 作成しておいた google.xml ファイルを選択します。

- 設定 ボタンをクリックします。

- サービスプロバイダの情報が登録されました。

- アイデンティティプロバイダの作成と、サービスプロバイダの登録という一連のタスクが終わったので自動的に初期画面にもどります。登録した情報を確認するには 連携 タブをクリックします。

- タスクウィザードで登録した内容がしっかりと保存されているのが確認できます。一度設定した情報を変更したい場合や内容のあやまりに気づいて修正したい場合にはここから変更することができます

GoogleApps側(サービスプロバイダ側)の設定
- GoogleApps の管理画面にログインします。下の画面はログイン後の初期画面です。高度なツール タブをクリックします。シングルサインオンの設定は、高度な設定であり、プレミアムユーザのみが使うことができる機能です。

- シングルサインオン(SSO)の設定 をクリックします。

- 下のように情報を入力します。

- SAMLでのシングルサインオン連携をセキュアに行なうためには、GoogleApps側にOpenSSO側で署名した証明書をアップロードします。証明書の作成は keytool コマンドを使用してOpenSSO側で行ないます。

- 証明書を作成します。

- openssl コマンドで、証明書のフォーマットを変換します。

- 作成した証明書を GoogleApps側の 確認証明 で選択して アップロード ボタンをクリックします。

# 下の方に進んで、変更を保存 ボタンをクリックして行なった設定を保存します。

NameIDマッピングの設定
GoogleApps とのシングルサインオンでは連携のためのNameIDとして uid を使用する必要があります。
- OpenSSOの管理画面にログインして、連携 タブをクリックします。表示された *http://idm.unopass.net:80/opensso* をクリックして、アイデンティティプロバイダの設定変更画面に進みます。

- NameID 値マップ の urn:oasis:names:tc:SAML:1.1:named-format:unspecified= を削除して、urn:oasis:names:tc:SAML:1.1:named-format:unspecified=uid を追加します。右上の 保存 ボタンをクリックして設定を保存します。
確認
行なった設定で問題なく動作すること確認します。
サンプルユーザの作成
- OpenSSO側でサンプルユーザを作成するために、OpenSSOの管理画面にログインします。

- アクセス制御 タブをクリックして、表示された (最上位のレルム) をクリックします。

- 対象タブ をクリックすると、ユーザ管理画面が表示されます。新規 ボタンをクリックして、ユーザ作成画面に進みます。

- 下のように情報を入力します。(ここではユーザ kimimasa を作成しています。NameIDマッピングの設定で記述したように今回はユーザIDが GoogleApps側とOpenSSO側のユーザの結びつけに使用されます。)
了解 ボタンをクリックしてユーザを作成します。
- *http://mail.google.com/a/swjp.net* にアクセスします。*http://mail.swjp.net/* でもかまいません。

- OpenSSOのログイン画面にリダイレクトされるので、kimimasa でログインします。

- GoogleAppsで提供される Gmailの画面が表示されます。(メールには個人情報なども含まれる可能性があるのでここでは画面のキャプチャはとっていません。)
クイズ
Gmailの画面の代わりではありませんが、面白い画面のキャプチャを載せておきます。
これは、実際に OpenSSOに kimimasa でログインして、GoogleAppsにリダイレクトされた後に表示されたエラーです。
さて、このエラーの原因はなんでしょうか?
シングルサインオンシステムにおいてのトラブルではよくある原因です。わかった方はコメント欄に答えをどうぞ!!

参考情報
- OpenSSOのチュートリアル
のGoogleとの連携の部分
このチュートリアルの情報をもとに今回のデモを作成しています。