OpenAM 14 SAML IdP(認証基盤)構築 10分間クッキング


SAML IdPの構築

ほとんど全てのクラウドサービスで外部認証用として使われているSAML(サムル)プロトコル。
OpenAMではウィザード形式で設定でき、非常に短時間で正確にSAML認証サーバー(IdP)の認証基盤を構築できます。

前提条件としてOpenAM 14の環境構築が終わっている必要があります。
環境構築手順は前の記事OpenAM 14を最速で構築する10分間クッキングにありますので参考にしてください。
OpenAMのSAML認証基盤の構築完了までだいたい10分です。

※パスワードレス認証の設定も試したい場合はOpenAM 14のパスワードレス設定10分間クッキングを参考にしてください。

今回構築するイメージ

今回構築する構成はOpenAMをSAML IdPとし、G-SuiteをSPとするSAMLによるSSO環境です。

OpenAM SAML認証基盤構築とサービス登録(SSO先追加)の流れ

通常[1]と[2]の作業は1回で良いです。[3]はサービス登録毎に行います。
1.SAMLアサーション署名用の鍵ペアの生成
2.OpenAMにSAML IdPを構築
3.クラウドサービス毎にSAML連携設定を追加(今回はG-Suite)

1. SAMLアサーション署名用鍵ペアの設定

OpenAM初期設定後に自動生成されているtest鍵ペアは、全OpenAMサーバー共通なので、絶対に運用に使わないで下さい。
もちろんテスト用途だけならOKですが、どうせならコマンドライン一行なので独自に鍵ペア生成して使いましょう。

CNとか、validity(有効期限)だけ要件にあわせて変更してます。
OpenAMのインストールされた環境で以下のコマンドを実行します。

# keytool -genkeypair \
 -keyalg rsa \
 -alias openam14-idp \
 -dname "CN=openam14.example.com,O=Example,ST=Tokyo,C=JP" \
 -keypass changeit \
 -keystore /usr/share/tomcat/openam/openam/keystore.jceks \
 -storetype JCEKS \
 -storepass changeit \
 -validity 365 \
 -keysize 2048

OpenAM管理者URLから amadmin でログインします。
https://openam14.example.com/openam?service=adminconsoleservice

デプロイメントからサーバーを選びます。

登録されているサーバー(今回は1台のみ)を選択します。

前の工程で生成した鍵ペアのエイリアスを署名鍵として設定します。
左メニューから セキュリティ を選び、キーストア タブを選びます。
証明書エイリアス鍵🔒マーク を押し、継承設定を解除後、
証明書エイリアスに先程実行したコマンドの -alias に指定した値 [openam14-idp] を入力し、変更の保存 を押します。

署名鍵設定は以上です。

2.SAML IdP構築

次にOpenAM上にSAML IdPを構築します。
[最上位のレルム] を選択します。

レルムの概要画面で SAMLv2プロバイダの作成 を選択します。

次の画面で ホストアイデンティティプロバイダの作成 を選択します。

名前 は自動的に入っています。これが Entity ID となります。任意に変更できますが、URLをベースとした値にして置いた方が安全です。
署名鍵はプルダウンから先程設定した openam14-idp を選びます。

トラストサークル はIdPとSPが共通で所属するイメージとなります。
任意の名前を入力し、右上の設定を押します。

一瞬でこの画面になると思いますが、この画面で既にIdP構築は完了しています。
右下の 終了 ボタンを押せば最初のレルム内の画面にもどります。

引き続きG-SuiteのSP設定を追加する場合は終了を押さずに Google Apps(旧G-Suite名)を設定する を選びます。

ここまででIdP構築は完了です。

SAML SPとしてクラウドサービスの G-Suite を追加する。

先程の画面で Google Apps(旧G-Suite名)を設定する を選ばなかった場合は、レルムのトップ画面 Google Appsの設定 からG-Suiteの設定が可能です。

G-Suiteで設定しているドメイン名を入力し追加、右上の作成を押します。

一瞬でこの画面になりますので、了解を押します。

この画面が出ればOpenAM側にはSAML SPとしてG-Suiteが追加されました。
つづいて、この画面に表示されている情報を元にG-Suite側の設定をします。
SAML署名用の証明書ををエクスポートする代わりにダウンロードして、G-Suite側へアップロードします。

OpenSSOCert.txtファイルを任意の場所へ保存します。

G-Suiteの管理者画面へログインします。
ブラウザの別のタブ、又は別ウィンドウで開き、コピーペーストしやすい状況で作業して下さい。
Admin画面の セキュリティ アイコンをクリックします。

セキュリティ画面を下へスクロールします。

サードパーティのIDプロバイダを使用したシングルサインオン(SSO)の設定 を選びます。

サードパーティのIDプロバイダを使用したシングルサインオン(SSO)の設定 画面の サードパーティのIDプロバイダでSSOを設定する にチェックを入れます。
ログインページURL および ログアウトページURL OpenAM画面に表示されていた、サインインページのURLサインアウトページのURL をコピーペーストします。
※ログインページURLは実質的にSAMLのエンドポイントです。ログイン画面のURLではありません。

次に ドメイン固有の発行元を利用 にチェックを入れ、パスワード変更用URL に 同じくOpenAM画面に表示されていた、パスワード変更のURLを入力し、一旦 保存を押した後、証明書の更新 を選びます。※入力の途中で証明書の更新を選ぶと入力した欄が空欄になってしまうので、一旦保存しています。

先程ダウンロードしたOpenSSOCert.txtをアップロードします。
アップロードが終わりましたら、右下の保存を押します。
G-Suite側の設定もこれで完了です。

G-Suite側の設定が完了し、OpenAM側の画面に出ている情報も不要なので終了を押します。

以上で、全ての設定は完了です。10分に収まりましたでしょうか。

G-Suiteと接続テスト

G-SuiteのURL [例]https://mail.google.com/a/設定したドメイン名 に接続します。
SAMLリクエストと共にOpenAM IdPへリダイレクトされます。
FirefoxのSAML-tracerアドオンで見ると以下のようなSAMLリクエストが確認できます。
一部マスクしてしまっていますが、Issuerに入っているのがSAML SPのEntityIDです。

OpenAMに既にログイン済みでない場合は、ログイン画面が表示されます。
既にOpenAMにログイン済みでセッションがある場合はログイン画面は表示されず次のSAMLレスポンスとなります。

認証成功後は SAMLレスポンス と共にGoogleへ戻ります。
SAML-tracerで確認すると、以下のようなSAMLレスポンスが応答されています。
署名が含まれています。
Issuerに入っているのがSAML IdPのEntityIDです。

無事Gmailの画面が表示されたらSAMLによるSSO完了です。