OpenAMからSAML連携でSAPにSSOしてみた

他の製品とのSAML連携記事はこちら。



SAMLの勉強も兼ねて、ADFS以外のソフトウェアでもSAMLを動かしてみたいと思いOpenAMを使ってSAPへSSOしてみました。
OpenAMとは?という方はこちらが纏まっています。
http://www.osstech.co.jp/_media/techinfo/seminar/hbstudy-20110416-sso.pdf


OpenAMインストール

基本的なインストール方法はこの記事のままです。
OpenAMのインストール (1/4):CodeZine(コードジン)

今回導入した環境は以下の通りです。

OpenAMはこちらからダウンロードできます。
https://backstage.forgerock.com/#/downloads/enterprise/OpenAM

OpenAMの10と最新のNightly Buildsも試したのですが、どちらもSAPとのSSO設定を動かすことはできず、最終的に11でやっと動きました。


OpenAM設定

設定に関しても基本的にはこちらのPDFのOffice365をSAPに読み替えたり、
http://www.traxion.com/wp-content/uploads/downloads/2014/06/Whitepaper-OpenAM-Azure-single-sign-on1.pdf

 
こちらの記事のSalesforceをSAPに読み替えれば設定できます。
クラウドサービスへのシングルサインオン ~ Salesforceとの連携 (1/5):CodeZine(コードジン)


いくつかポイントとなるところだけ抜き出します。


設定のポイント

(OpenAM側)IdP設定メタデータの出力

メタデータエクスポートはこちらのIdPの設定後にこちらのURLから行います。
http://_OpenAM_Host_:8080/openam/saml2/jsp/exportmetadata.jsp

メタデータには証明書も含まれるので、上記のSalesforceの手順にあるようにKeytoolで証明書を抜き出さしてSP側にインストールは行わなくても大丈夫です。(Salesforceの手順のようにメタデータ利用してない場合は証明書を抜き出してSP側でインストールする必要があります)

(OpenAM側)IdP表明コンテンツの設定

NameID の書式>NameID 値マップに以下を追加します。
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified=uid

これでOpenAMのユーザIDがSAML上に上記のフォーマットで出力されます。
例えばOpenAM上で「demouser」ユーザを入れた場合はこんな感じのSAMLが生成されます。
SAP側はこれをSAPのUserIDとして受け取る設定すればOKです。

 <saml:Subject>
            <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
                         NameQualifier="http://<OpenAM>:8080/openam"
                         >demouser</saml:NameID>
            <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
                <saml:SubjectConfirmationData InResponseTo="Sc67072c9-b47a-4b46-9a32-9a042a19ef29"
                                              NotOnOrAfter="2014-07-21T02:49:15Z"
                                              Recipient="https://<SP名 今回はSAPのURL>"
                                              />
            </saml:SubjectConfirmation>
 </saml:Subject>

 
 
 
 

(SAP側)SP側のメタデータ出力

上記のOffice365との連携にもありますが、SAP側のメタデータ出力時には署名は外しておいてください。ファイルのアップロード時にエラーがでます。信頼関係をしっかり設定すれば通ると思いますが、今回は検証なので単純に署名外してます。

このように、NWAからの設定だけでメタデータから署名を外せます

 
 




(SAP側)デバック方法

SAP側でSAMLを受け取る時の情報を取得したい場合デバックツールが使えます。

NWA>トラブルシューティング>ログとトレース>セキュリティトラブルシューティングウィザード
こちらでSAML2.0のデバック情報を取得できます。

 
 

時刻同期

上記のデバックでIssue Instant is not valid yetなどのメッセージが出たらIdPとSPの時刻がずれていないか確認してみてください。



IdP-Initiated

OpenAMのIdP Initiatedのパラメータはこちらです。
9. Using SAML 2.0 Single Sign-On & Single Logout - - OpenAM Administration Guide

たとえばこのようなURLになります。

http://[OpenAM FQDN]:[Port]/openam/idpssoinit?metaAlias=/idp&spEntityID=SAP&binding=HTTP-Artifact&NameIDFormat=urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

動かしてみる

テストする方法はいくつかありますが、今回はSAP側のアサーションコンシューマサービス (ACS)にアクセスしてみる形でテストします。

デフォルトのエンドポイントはこちらです。

https://SAP_JAVA_HOSTNAME/saml2/sp/acs

RelayStateを設定しないアクセスになりますので、SAP側のデフォルトアプリケーションパスにリダイレクトされるはずです。
今回はデフォルトアプリケーションパスに「/irj」(ご存知の通りSAP PortalのAliasです)を設定しています。SAP Portalにリダイレクトされるはずです。

では「https://SAP_JAVA_HOSTNAME/saml2/sp/acs」アクセスしてみます。
 

通常ならここでSAPのログオン画面が出るのですが、IdPであるOpenAMのログオン画面が表示されます。

OpenAMの側でユーザ登録しておいたotomoユーザにアクセスします。このユーザと同IDのユーザをSAP側にも登録してあります。



OpenAM側で認証が行われると、SAP側にリダイレクトされます。

SAP Portalの画面が表示されました。しっかり指定されたユーザでSSOできていることがわかります。


 
 
SAPのSSO方式の選択肢としてSAMLを入れておくと、今後ますます必要になるであろう、SAPと他システムとのID連携の幅が更に広がると思います。









ここではCentOS使ってますが、OpenAMはWindowsにもインストール可能です。yomon.hatenablog.com




SAPのSSOに関しては、会社の方のブログにも纏めて書いてます。