SSO ( Single Sign On / シングルサインオン )について

JPiereサポーターの皆様には特典として、SSO( Single Sign On / シングルサインオン)ができる、プラグインを提供致します。

現在はSAMLだけに対応していますが、他のSSOにも対応できるように検討しています。

開発環境の構築

JPiereサポーターの皆様にはソースコードでSSOが実装されているプラグインを提供致します。下記の説明を参考に開発環境を構築して下さい。

jpiere.plugin.webui.sso開発環境
jpiere.plugin.webui.sso開発環境

SSOが実装されているのは、jpiere.plugin.webui.ssoプロジェクトであり、org.adempiere.ui.zkのフラグメントとして実装されています。

POMファイルがある事からわかる通り、Mavenのプロジェクトです。Eclipseへインポートする際には、ファイル -> インポート -> 既存Mavenプロジェクトとしてインポートして下さい。

jpiere.plugin.webui.ssoのインポート
jpiere.plugin.webui.ssoのインポート

基本的には他のフラグメントのプラグインと同様に動作します。

SAMLによるSSO

SAMLによるSSOを動作させるためには、jpiere.plugin.webui.ssoにあるsaml.zulファイルをorg.adempiere.ui.zkプロジェクトにコピーする必要があります。

jpiere.plugin.webui.ssoにあるsaml.zulファイルをorg.adempiere.ui.zkプロジェクトにコピーして下さい。
jpiere.plugin.webui.ssoにあるsaml.zulファイルをorg.adempiere.ui.zkプロジェクトにコピーして下さい。

org.adempiere.ui.zkのビルド設定にsaml.zulを加えて下さい。

org.adempiere.ui.zkのマニフェストファイルのビルドタブ
org.adempiere.ui.zkのマニフェストファイルのビルドタブ

セッションタイムアウトのページから再度SSOを実行する

セッションタイムアウトの画面で「続ける」をクリックすると、ログイン画面に遷移します。

この「続ける」をクリックした時に、IdPのログイン画面に遷移させたい場合、「sessiontimeout.zul」を下記の赤線のように変更すると簡単に対応する事ができます。

SAMLのSP-initiatedの機能を使用して、IdPのログイン画面にリダイレクトさせます。

SAMLによるSSOの設定

SSO SAMLコンフィグウィンドウで、SAMLによるSSOの設定を行う必要があります。

機能の概要は下記を参照して下さい。

SAMLコンフィグタブ(JP_SAML_Configテーブル)

SSO SAMLコンフィグ
SSO SAMLコンフィグ

◆詳細表示 [Verbose]

SSOに失敗した際に、エラー原因を表示するかどうか設定します。

  • ON…ログイン画面にSSOに失敗した理由を表示します。そしてAuthFailure.logファイルにスタックトレースを出力します。
  • OFF…ログイン画面にSSOに失敗した旨だけが表示されます。そしてAuthFailure.logファイルにログインの失敗理由を出力します。

◆SAML サーブレットファイル [SAML Servlet File]

SAMLでシングルサインオンを行う際にアクセスするファイル名です。

固定値(読取専用):saml.zul

◆SAMLパラメータ [SAML Parameter]

SAMLでシングルサインオンを行う際に、JPiere/iDempiereのクライアントを識別するためのパラメータを設定します。

固定値(読取専用):client

◆SAMLパラメータ値 [SAML Parameter Value]

SAMLパラメータに対応する値を設定します。小文字のアルファベットと数値のみ使用する事ができます。他のクライアントも含めて一意になる必要があります。

【補足説明】SAMLでシングルサインオンするためのURL

SAMLサーブレットファイルフィールド、SAMLパラメータ、SAMLパラメータ値の3つで、SAMLを使ったシングルサインオンをするためのURLを構成します。

例えば、iDempiereをローカルPCにセットアップした時のデフォルトとなる「localhost:8080」を使用している場合で、SAMLパラメーター値に”oes”と入力している場合であれば、「http://localhost:8080/webui/saml.zul?client=oes」にアクセスする事でシングルサインオンを行う事ができます。

IdP-Initiated SAMLにおいても、上記のURLにSAMLレスポンスを送信するようにIdP側に設定して下さい。

◆SAML Request Issuer

SP-initiated SAMLにおいて、IdPへのリクエストにIssuerとして設定されます。

◆SAML Redirect URL

SP-initiated SAMLにおいて、リダイレクト先のIdPのURLを設定します。

◆SAML Binding

SP-initiated SAMLにおいて、IdPへのリクエストに含めるSAMLのBindingを設定します。

  • Artifact Binding(AB) … JPiereでは対応していません。
  • Post Binding(PB) … 推奨設定。
  • Redirect Binding(RB) … JPiereでは対応していません。

◆SAML Name ID Policy

SP-initiated SAMLにおいて、IdPへのリクエストに含めるName ID Policyを設定します。

  • Unspecified(UN)
  • Email Address(EM)
  • Kerberos(KB)
  • Entity(ET)
  • Transient(TR)
  • persistent(PT)

◆SAML Response 署名 公開鍵 [SAML Response Sign PK]

SAML Responseの署名を検証するための公開鍵を設定します。SAML Responseに公開鍵が含まれていても、このフィールドの公開鍵が設定されている場合は、こちらを優先して使用します。このフィールドに公開鍵が設定されていない場合は、SAML Responseに含まれている公開鍵を使用します。

◆SAML Assertion 署名 公開鍵 [SAML Assertion Sign PK]

Assertionの署名を検証するための公開鍵を設定します。 SAML Responseに公開鍵が含まれていても、このフィールドの公開鍵が設定されている場合は、こちらを優先して使用します。このフィールドに公開鍵が設定されていない場合は、SAML Responseに含まれている公開鍵を使用します。

◆SAML Assertion Issuer [SAML Assertion Issuer]

AssertionのIssuerを設定します。ここに設定した値と、SAML Responseに含まれているAssertionタグ配下のIssuerタグの値が異なっている場合、エラーになります。

◆Response有効期間(分) [Response Available Period(Min)]

SAML Responseの有効期間を分で指定します。0の場合は、有効期間のチェックはしません。

  • SAML ResponseのIssueInstantの時間が、ここで設定した有効期間内かどうかチェックします。
  • AssertionのIssueInstantの時間が、ここで設定した有効期間内かどうかチェックします。
SSO SAMLコンフィツ設定例
SSO SAMLコンフィツ設定例

SSOのテスト用IdP Keycloak(キークローク)

SSOは、JPiere/iDempiereだけでは成り立ちません。SSOのテストするにもIdP(Identity Provider)が必要になります。JPiereではテスト用のIdPとして、オープンソースのKeycloakを使用しています。

Keycloak Lab

Keycloak Labでは、JPiereのSSOの機能をテストするための環境構築について調査及び研究しています。