他の製品との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)にアクセスしてみる形でテストします。
デフォルトのエンドポイントはこちらです。
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に関しては、会社の方のブログにも纏めて書いてます。