Print-friendly Version
企業内でシングルサインオン (SSO) を使用すると、ユーザーは 1 回サインオンするだけで、その企業のすべてのアプリケーションにアクセスできます。SSO を実装するには、次のものが必要です。
アイデンティティープロバイダ (IdP)。ユーザーを認証します
サービスプロバイダ (SP)。IdP による認証ステータスの妥当性検査を行い、認証されたユーザーがそのタスクの実行を承認されていることを確認します
IdP と SP の間での認証データおよび承認データの交換は、Security Assertion Markup Language (SAML) と呼ばれる XML 規格を使用して実行されます。SAML は、Organization for the Advancement of Structured Information Standards (OASIS) の Security Services Technical Committee の製品です。
Sun Java System Access Manager は、認証と承認のやりとりに関して、最新の version 2.0 も含め SAML 仕様のすべてのバージョンをサポートしています。Sun Java System Access Manager の詳細は、そのマニュアル を参照してください。(日本語版はこちら )
この記事では、SAML の基本的な概念を説明し、Sun Java System Access Manager 7.1 (以降 Access Manager) と SAML 1.x Web ブラウザアーティファクトプロファイル (定義は後述) を使用して SSO を実現する手順について説明します。ここでは、IdP は Access Manager です。SP は、SAP NetWeaver Application Server Java (SAP J2EE エンジン) 上に配備された SAP NetWeaver Enterprise Portal 2004s (以降 SAP EP) です。
目次
SAML には 2 つの主要概念が組み込まれています。
表明: 主体 (ユーザー) の認証、承認、または属性に関する情報を含んでいるという事実を宣言するものです。
プロファイル: 表明の埋め込み方法と抽出方法を定義する一連の規則です。プロファイルは、表明が権限によってほかのオブジェクトとどのように組み合わされるか、権限からどのように転送されるか、そのあとで信頼できるパートナーサイトでどのように処理されるかを定義します。 SAML では、次の 2 つのプロファイルが定義されます。
Web ブラウザアーティファクトプロファイル: アーティファクトと呼ばれる SAML 表明へのポインタをクエリー文字列に含めます。これは通常、SP への HTTP リダイレクトのパラメータ SAMLart です。SP はこれに対して、アーティファクトを指定して IdP に直接 SOAP/HTTP 要求を行い、その応答で実際の SAML 表明を取得します。SAP J2EE エンジンはこのプロファイルを実装しています。
Web ブラウザ POST プロファイル: IdP から SP に送られる応答に HTML フォームの一部として SAML 表明を含めます。 これら 2 つのプロファイルは、IdP と SP (この記事では Access Manager と SAP J2EE エンジン) の間で表明がどのように交換されるかという点で異なります。
SSO の認証と承認は次のように進められます。
SAP J2EE エンジン上に配備され、SAML 認証に対応するよう設定されているアプリケーション (SAP EP など) に、Access Manager を介してユーザーがアクセスします。
まだ認証されていない場合、ユーザーは Access Manager によって認証されます。
Access Manager はユーザーの認証表明を作成し、保管します。
Access Manager は、名前識別子マッパーなどの登録済みプラグインを呼び出します。名前識別子マッパーは、認証表明内で認証されたユーザーをその名前識別子に対応付け、対応付けられた識別子を使用して表明を更新します。
Access Manager は表明のためのアーティファクトを作成し、SAP J2EE エンジンに登録されている SAML 受信者への HTTP リダイレクトを発行します。
ブラウザは、SAP J2EE エンジン上の SAML 受信者サービスにユーザーをリダイレクトします。
SAP J2EE エンジン上の SAML 受信者は、要求とアーティファクトを SAP EP に転送します。SAP EP には SAML ログインモジュールが設定されています。次に、このログインモジュールがアーティファクトを評価し、アーティファクトに基づいて IdP (Access Manager) のホスト名とポート番号を取り出します。
SAP J2EE エンジン上の SAML ログインモジュールは、アーティファクトを含んだ表明要求を生成し、この要求を Simple Object Access Protocol (SOAP)/HTTP メッセージとして Access Manager の SAML SOAP 受信者に送信します。
Access Manager は、表明要求に含まれているアーティファクトに従って、対応する表明を取得します。
Access Manager はこの表明を SAML ログインモジュールに返します。
モジュールは表明を分析し、ユーザーを認証します。
ユーザーは、認証されるとすぐに、SSO を介して SAP EP にアクセスします。
手順のフローを図 1 に示します。
図 1:手順のフロー
ここでは、SAP J2EE エンジンと連携して動作するように Access Manager を設定する方法について説明します。
SAP J2EE エンジンのサイト ID を作成する まず、SAP J2EE エンジンのサイト ID を作成します。
Access Manager を実行するマシン上に、この ZIP ファイル を解凍します。
amgenSiteId スクリプト内の AM_HOME が正しいディレクトリを指すようにします。注: この手順は、デフォルト (/opt) 以外の場所に Access Manager をインストールした場合のみ実行してください。
amgenSiteId に実行権を付与します。
amgenSiteId コマンドを使用して、SAP J2EE エンジンのサイト ID を生成 します。たとえば、次のように入力します。% amgenSiteId http://ephost.companyxyz.com:50100 注: URL の末尾にスラッシュ (/) が付いていない ことを確認してください。
重要: あとで使用するために、この ID を記録しておいてください。
Java 仮想マシンのクラスパスを設定する 次に、Access Manager が配備されている Web コンテナの Java 仮想マシンのクラスパスに sap_saml_sso.jar ファイルを追加します。通常、この作業は Web コンテナの管理コンソールで実行します。詳細は、関連するマニュアルを参照してください。
変更を有効にするために、必ず Web コンテナを再起動してください。
Access Manager のサイト ID を取得する 次に、Access Manager の一意のサイト ID を取得します。
Access Manager に amAdmin としてログインします。
「Federation」タブをクリックしてから「SAML」タブをクリックします。
「Site Identifiers」で、「Instance ID」の下にある最初のエントリのリンクをクリックします。 「Edit Site Identifier」ページにサイト ID とほかの関連情報が表示されます。図 2 を参照してください。
あとで使用するために、(図 2 で強調表示されている) サイト ID を一時ファイルに保存します。
図 2:「Edit Site Identifier」ページ
SAP J2EE エンジンを信頼できるパートナーとして登録する 次に、Access Manager で、SAP J2EE エンジンを信頼できるパートナーとして登録します。
「Edit Site Identifier」ページの「Back to SAML」をクリックします。 Access Manager の SAML 設定のホームページが表示されます。
「Trusted Partners」の下の「New」をクリックします。 「Select trusted partner type and profile」ウィザードが表示されます。
「Destination」の下の「Artifact」を選択し、その他のオプションはすべてオフにします。「Next」をクリックします。 「Add New Trusted Partner」ページが表示されます。
次のように値を指定し、「Finish」をクリックします。
Source ID
Host List
SAP J2EE エンジンを実行するマシンの IP アドレス。
Target
SAP J2EE エンジンを実行するマシンの完全修飾名。
SAML URL
SAP J2EE エンジン上の SAML 受信者の URL。通常は http://SAP_J2EE_host .domainname :portnumber /saml/receiver という形式です。場合によっては、http が https になることもあります。
Name Identifier Mapper
com.sun.identity.saml.plugins.UidMapper
「Save」をクリックします。 Access Manager で設定が確認されます。図 3 を参照してください。
図 3:Access Manager で信頼できるパートナーとして登録された SAP J2EE エンジン
Access Manager の SAML 設定のホームページで、「Trusted Partners」の下に SAP J2EE エンジンのエントリが表示されるようになったことを確認します。
背後のロジックは次のようになっています。Java クラス UidMapper は NameIdentifierMapper インタフェースを実装し、そのメソッド getNameIdentifier は SAML 表明の NameIdentifier コンポーネントの値を返します。実際、UidMapper は、認証されたユーザーのデータを Access Manager トークンから取り出し、それをユーザーのログイン ID に対応付けます。このようにすると、その ID は、Access Manager から SAP J2EE エンジンに送信される SAML 表明の NameIdentifier コンポーネントと一致します。
SAP J2EE エンジンにユーザーを作成する 簡潔にするために、この記事の例では単純なユーザーマッピングを使用します。つまり、SAP J2EE エンジンの各ユーザーのエントリに、Access Manager のログイン ID と同じログイン ID が指定されています。ただし、SSO には単純なユーザーマッピングが必要というわけではありません。 アカウントマッピング、名前識別子マッピング、および属性マッピングをカスタマイズすることにより、異なるマッピングを実現できます。詳細は、『Sun Java System Access Manager 7.1 Federation and SAML Administration Guide』の第 10 章 を参照してください。
Sun Java System Identity Manager を使用すると、SAP EP、SAP R/3、SAP HR といった複数のベンダーのアプリケーションに対して、ユーザー、ロール、その他の情報のプロビジョニングを、集中管理によって自動的に一括で行うことができます。詳細は、Sun Java System Identity Manager のマニュアル を参照してください。(日本語版はこちら )
テストのために、『Sun Java System Access Manager 7.1 管理ガイド』の第 6 章 の手順に従って、Access Manager でユーザーを作成します。
ここでは、SAML 認証に対応するように SAP NetWeaver Application Server を設定する方法について説明します。
SAML サービスの起動モードを変更する まず、SAP J2EE エンジンの起動時に常に SAML サービスが起動するようにします。
SAP J2EE Visual Administrator を起動します。
SAP Visual Administrator にログインします。
左側の区画のツリー表示で、「Server 0」>「Services」>「Configuration Adapter」の順に展開します。
右側の区画のツリー表示で、「Configurations」> cluster_data >「server」> cfg >「services」の順に展開します。
鉛筆アイコンで示されたボタンをクリックして、編集モードに切り替えます。確認を求めるプロンプトが表示されたら、「Yes」をクリックします。
右側の区画でスクロールダウンし、「Propertysheet tc~sec~saml~service-runtime」をダブルクリックします。 「Change Configuration」ダイアログボックスが表示されます。
2 行目の「startup-mode」をクリックします。 「Change property entry」ダイアログボックスが表示されます。図 4 を参照してください。
図 4:SAML サービスの起動モードの変更
「Custom」フィールドに「always」と入力し、「Apply custom」をクリックします。 続いて表示される「Display configuration」ダイアログボックスに、設定が表示されます。
「OK」をクリックします。
SAML SOAP 受信者の宛先を作成する 次に、Access Manager の SAML SOAP 受信者を表す HTTP の宛先を作成します。
SAP Visual Administrator の左側の区画で、「Cluster」タブをクリックし、「Server 0」>「Services」>「Destinations」の順に展開します。
右側の区画で「Runtime」タブをクリックし、「Destinations」>「HTTP」の順に展開します。
「New」ボタンをクリックし、テキストフィールドに新しい宛先の名前を「SunAM」などと入力します。「OK」をクリックします。
「Connection Settings」で、URL のテキストフィールドに Access Manager の SAML SOAP 受信者の URL を「http://ephost.companyxyz.com:8080/amserver/SAMLSOAPReceiver」などと入力します。 ここでは、テストのために、セキュリティー保護されていないチャネルを使用します。このチャネルでは「Authentication」が「None」に設定されているため、クライアント認証は行われません。本稼働環境では、BASIC や SSL など、クライアント認証が行われるセキュリティー保護されたチャネルを指定してください。
「Save」をクリックします。図 5 を参照してください。
図 5:Access Manager の SAML SOAP 受信者を表す宛先
SAML サービスを設定する 次に、SAP J2EE エンジン上の SAML サービスを設定します。
SAP Visual Administrator の左側の区画で、「Cluster」タブをクリックし、「Server 0」>「Services」>「Configuration Adapter」の順に展開します。
右側の区画で「Runtime」タブをクリックし、スクロールダウンします。「SAML」>「Configuration」>「PartnersInbound」の順に展開します。
鉛筆アイコンで示されたボタンをクリックして、編集モードに切り替えます。確認を求めるプロンプトが表示されたら、「Yes」をクリックします。
PartnersInbound ノードを右クリックし、コンテキストメニューから「Create Sub Node」を選択します。
テキストフィールドにパートナーの名前を「SunAM」などと入力します。「Create」をクリックします。
新しく作成したノードを展開し、次のように値を指定します。
Destination Name: 前節で作成した宛先の名前を入力します。
SourceID: 前の節 で取得した Access Manager のサイト ID を入力します。その ID は、B64:Gz5Ie6oAgITQsmjxfsDyru/jtiM= などのように、B64 で始まります。
テストのために、「Configurations」> saml >「Configuration」>「Settings」の下の PermitInsecureConnections パラメータを true に設定します。図 6 を参照してください。
図 6:SAML サービスのパラメータ
注: 本稼働環境では、PermitInsecureConnections を false に設定してください。
アプリケーションのログインモジュールスタックに SAML ログインモジュールを追加する 次に、アプリケーションのログインモジュールスタックに SAML ログインモジュールを追加します。この例では、SAP EP で使用される ticket テンプレートを変更します。
SAP Visual Administrator の左側の区画で、「Cluster」タブをクリックし、「Server 0」>「Services」>「Security Provider」の順に展開します。
「Policy Configuration」タブをクリックし、「Components」区画で ticket を選択します。
鉛筆アイコンで示されたボタンをクリックして、編集モードに切り替えます。確認を求めるプロンプトが表示されたら、「Yes」をクリックします。
右側の区画で「Modify」をクリックし、ログインモジュールスタックを図 7 のとおりに調整します。その後、SAP Visual Administrator を閉じます。
図 7:ログインモジュールスタックへの SAML ログインモジュールの追加
SAP J2EE エンジンを再起動します。
最後に、SAML 表明による SAP EP の SSO モードをテストします。
http://ephost.companyxyz.com:8080/amserver/SAMLAwareServlet?TARGET=http://ephost.companyxyz.com:50100/irj/portal などの SAP EP の SSO トリガーに移動します。 SAP EP では、Access Manager の認証を受けるためのプロンプトが表示されます。
前の節 で作成したユーザーのいずれか (Administrator など) でログインします。 SAP EP で開始画面が表示されます。図 8 を参照してください。
図 8:SAP EP の開始画面
Sun Java System Access Manager
関連文献
Sun 開発者サービス