2012年5月9日水曜日

OpenAM10.0でのSAMLメタデータ入出力

OpenAM10.0(on CentOS5.8)にてSAMLメタデータ入出力仕様を調査する。
メタデータはOpenAM画面(以降、画面とする)からもOpenAMコマンド(以降、コマンドとする)からも登録可能。


※コマンドを利用する場合は別途ssoadmをインストールする必要あり。

1.準備
まず、画面よりトラストサークルをsamlcotとして、ホストアイデンティティープロバイダ(IDP)とホストサービスプロバイダ(SP)を作成する。

メタデータはexportmetadata.jspを使って出力可能である。amadminでログイン後、ブラウザのURLに
http://goodjob-idp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp
http://goodjob-sp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp
を直打ちしてエキスポートする。

2.画面
OpenAM管理コンソールより、一旦クリーンな状態(IDP、SPが未登録)にする。
ただし、トラストサークルのみ残しておく。
2.1.IDP側での登録
リモートアイデンテティプロバイダ(IDP)を作成する。

2.1.1.アップロード
ローカルPCのメタデータを指定。


[設定] ボタンを押下。化けた。


登録はされている。

2.1.2.URL指定
これはメタデータの交換の時に使う。リモートサービスプロバイダとして、相手(SP側)のURLを指定する。以下のURLを指定。
http://goodjob-sp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp



2.2.SP側での登録
リモートサービスプロバイダ(SP)を作成する。

2.2.1.アップロード
ローカルPCのメタデータを指定。


[設定] ボタンを押下。化けた。



登録はされている。



2.2.2.URL指定
これはメタデータの交換の時に使う。リモートアイデンティティープロバイダとして、相手(IDP側)のURLを指定する。以下のURLを指定。
http://goodjob-idp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp


3.コマンド
まず、http://www.forgerock.org/openam.html より ssoAdminTools_10.0.0.zip をダウンロードする。

3.1.ssoadmセットアップ
[root@goodjob-idp src]# mkdir /usr/local/ssoAdminTools_10.0.0
[root@goodjob-idp src]# cd /usr/local/ssoAdminTools_10.0.0
[root@goodjob-idp ssoAdminTools_10.0.0]# unzip ssoAdminTools_10.0.0.zip
[root@goodjob-idp ssoAdminTools_10.0.0]# JAVA_HOME=/usr/java/jdk1.6.0_32
[root@goodjob-idp ssoAdminTools_10.0.0]# export JAVA_HOME
[root@goodjob-idp ssoAdminTools_10.0.0]# ./setup
OpenAM サーバーの設定ファイルのパス [/root/openam]:/var/lib/openam
デバッグディレクトリ [/usr/local/ssoAdminTools_10.0.0/debug]:/var/lib/openam/openam/debug
ログディレクトリ [/usr/local/ssoAdminTools_10.0.0/log]:/var/lib/openam/openam/log
スクリプトは次のディレクトリに正しく設定されています:  /usr/local/ssoAdminTools_10.0.0/openam
デバッグディレクトリは /var/lib/openam/openam/debug です。
ログディレクトリは /var/lib/openam/openam/log です。
この tools.zip のバージョン:  OpenAM 10.0.0 (2012-April-13 10:24)
サーバーインスタンスのバージョン:  OpenAM 10.0.0 (2012-April-13 10:24)
※SPも同様。

--------------------------------------------------------------
3.2.IDPメタデータ出力
[root@goodjob-idp ssoAdminTools_10.0.0] #cd /usr/local/ssoAdminTools_10.0.0/openam/bin
[root@goodjob-idp bin]# vi /tmp/pwd.txt
※IDP側のamadminのパスワードを記載する。
[root@goodjob-idp bin]# chmod 400 /tmp/pwd.txt
[root@goodjob-idp bin]# ./ssoadm create-metadata-templ -y "http://goodjob-idp.openam.com:8080/openam" -u amadmin -f /tmp/pwd.txt -i /idp -m ../idp-standard.xml -x ../idp-extended.xml
レルム {1} のホストエンティティー設定が、ファイル ../idp-extended.xml に書き込まれました。
レルム {1} のホストエンティティー記述子が、ファイル ../idp-standard.xml に書き込まれました。

--------------------------------------------------------------
3.3.SPメタデータ出力 ★やってみたが、これは使えなかった★
[root@goodjob-sp ssoAdminTools_10.0.0] #cd /usr/local/ssoAdminTools_10.0.0/openam/bin
[root@goodjob-sp bin]# vi /tmp/pwd.txt
※SP側のamadminのパスワードを記載する。
[root@goodjob-sp bin]# chmod 400 /tmp/pwd.txt
[root@goodjob-sp bin]# ./ssoadm create-metadata-templ -y "http://goodjob-sp.openam.com:8080/openam" -u amadmin -f /tmp/pwd.txt -i /sp -m ../sp-standard.xml -x ../sp-extended.xml
レルム {1} のホストエンティティー設定が、ファイル ../sp-extended.xml に書き込まれました。
レルム {1} のホストエンティティー記述子が、ファイル ../sp-standard.xml に書き込まれました。

出力したファイルの中身を見たところ、SPのメタデータを<IDPSSODescriptor>として出力してしまう。
※OpenAM 10.0のバグと思われる。IDPとSPをサーバ単位で分けた環境で確認済み。

よって、今回は「1.準備」で取得した
http://goodjob-sp.openam.net:8080/openam/saml2/jsp/exportmetadata.jsp
のメタデータを取得することにする。

3.4.コマンドでの登録
OpenAM管理コンソールより、クリーンな状態(IDP、SPが未登録)にする。

3.4.1.SP側でのトラストサークル作成
[root@goodjob-sp bin]# ./ssoadm create-cot -u amadmin -f /tmp/pwd.txt -t samlcot -e /
トラストサークル samlcot が作成されました。

3.4.2.IDP側でのトラストサークル作成
[root@goodjob-idp bin]# ./ssoadm create-cot -u amadmin -f /tmp/pwd.txt -t samlcot -e /
トラストサークル samlcot が作成されました。

3.4.3.SP側でのSPメタデータ入力
トラストサークルはsamlcotとする。
[root@goodjob-sp bin]# ./ssoadm import-entity -u amadmin -f /tmp/pwd.txt -e / -m ../exportmetadata-sp.xml -t samlcot -c saml2
ファイル ../exportmetadata-sp.xml をインポートしました。

3.4.4.IDP側でのIDPメタデータ入力
トラストサークルはsamlcotとする。
[root@goodjob-idp bin]# ./ssoadm import-entity -u amadmin -f /tmp/pwd.txt -e / -m ../idp-standard.xml -x ../idp-extended.xml  -t samlcot -c saml2
ファイル ../idp-standard.xml をインポートしました。
ファイル ../idp-extended.xml をインポートしました。

3.5.登録確認
3.5.1.IDP側の連携タブ押下時
アクセスできたが、インスタンス(サーブレットコンテナ)再起動は不要?



3.5.2.SP側の連携タブ押下時
アクセスできたが、インスタンス(サーブレットコンテナ)再起動は不要?



4.メタデータ登録のチェック処理

[設定] ボタンのForm文のactionは../task/CreateRemoteIDP(またはCreateRemoteSP)

以下が呼ばれる。
\openam_src_10.0.0\products\federation\openfm\source\com\sun\identity\workflow
\CreateRemoteIDP.java(またはCreateRemoteSP.java)

その中でさらに以下が呼ばれる。
\openam_src_10.0.0\products\federation\openfm\source\com\sun\identity\workflow
\ImportSAML2MetaData.javaのimportData()

この中でメタデータを受け取って、getEntityDescriptorElement()で解析している模様。

<チェック内容>
・メタデータがnullでない。
・メタデータ(ドキュメント)のローカル名がEntityDescriptor、もしくは名前空間URIが"urn:oasis:names:tc:SAML:2.0:metadata"である。
・メタデータの署名検証にて問題なし。
※なお、署名値(<ds:Signature>タグ)がない場合は、エラーとしない。
・名前空間に"urn:oasis:names:tc:SAML:2.0:metadata"を持つ<RoleDescriptor>タグを取得し、
名前空間に"http://www.w3.org/2000/xmlns/"を持つtype属性の属性値が"AttributeQueryDescriptorType"、もしくは
":AttributeQueryDescriptorType"で終わる。


<参考>
http://openam.forgerock.org/doc/admin-guide/index.html#chap-federation
および
ssoadmコマンドのヘルプ、OpenAM10.0のソース





0 件のコメント:

コメントを投稿