前回に引き続きOracle Cloudとのシングルサインオンを構成していきます。今回はIdentity ProviderとしてAzure ADを使ってみます。
参考:前回の記事)
[SAML]Oracle CloudとのSSOを構成する~AD FS編
http://idmlab.eidentity.jp/2016/08/samloracle-cloudssoad-fs.html
尚、基本的な考え方や構成は前回の記事で解説したものと変わりませんので、前回の記事を読んでいない方は、先に前回の記事を読んでください。
◆構成するにはAzure AD Premiumが必要
尚、初めに結論を書きますが、Oracle Cloudとのシングルサインオンを構成するには、タイトルにある通りAzure AD Premiumのライセンスが必要となります。これまでも書いてきたとおりAzure AD自身は、無償版であってもSAMLのエンドポイントが使えるのでSAML SPとのシングルサインオンを構成することが出来ます。
ただ、現在のところ何故かOracle Cloudとのシングルサインオンは無償版では動作させることが出来ませんでした。(後述しますが、Oracle CloudのAssertion Consumer ServiceへSAMLアサーションをPOSTしたところでシステムエラーが出ます。私のやり方が悪いだけかもしれませんが、POSTされているSAMLアサーションの中身はAzure AD Premiumで構成したものと変わらないので、何が違うのかよくわかっていません)
では、早速構成してみます。
◆Azure ADへOracle CloudをSAML SPとして登録する
他のアプリケーションと同様にAzure ADのギャラリーからアプリケーションを追加し、Oracle CloudのSAMLに関連するパラメータを入力、SPとして登録を行います。カスタムアプリケーションを追加します。
アプリケーションの作成が完了したら、シングルサインオンを構成します。
まずはシングルサインオンの構成としてAzure ADのシングルサインオンを選択します。
次に、Oracle Cloudの以下の情報を登録します。
EntityID : Oracle Cloudの識別子
Assertion Consumer Service URI : SAML AssertionをPOSTする先のURI
これらの情報はOracle CloudのSSO設定の中に記載されているので、コピー&ペーストします。
少しずつ言葉が違いますが、
- EntityID=Oracle Cloud上の「プロバイダID」=Azure ADにセットする「識別子」
- Assertion Consumer Service URI=Oracle Cloud上の「アサーションコンシューマーサービスURL」=Azure ADにセットする「応答URL」
です。
次に進むと、Azure ADに関する情報が表示されますので、メタデータのダウンロードをしておきます。ダウンロードが終わったら一番下のチェックボックスにチェックを入れてウィザードを終了させてしまっても大丈夫です。
◆Oracle CloudへAzure ADをSAML IdPとして登録する
次は、反対にOracle Cloud側へAzure ADを登録します。SSOの構成ページを開き、先ほどダウンロードしたAzure ADのメタデータをアップロードします。
これで構成は完了です。
◆ユーザの割り当てとテスト
早速テストを行いますが、その前にAzure AD側でユーザの割り当てを行っておきます。もちろんOracle Cloud側にも対象のユーザを作っておく必要もあります。Azure ADのアプリケーションの構成でユーザの割り当てを行います。
SSOの動作試験は前回の記事と同様にOracle CloudのSSO設定ページから行うことが出来ます。
Start SSOのボタンをクリックするとAzure ADのサインイン画面へリダイレクトされるので、ログインします。
ログインが完了するとOracle CloudへSAMLアサーションがPOSTされ、シングルサインオンが完了します。
◆他の属性マッピングのバリエーションを試す
Azure ADを使った場合もAD FSの場合と同様に他の属性を識別子にマッピングすることも可能です。例えば、識別子を電子メールアドレスにし、NameIDに格納する場合は以下のような設定になります。尚、Azure ADではNameIDの値はUserPrincipalName(メールアドレス形式)でnameid-formatはemailaddressなので、AD FSの場合のようにカスタムプロパティの設定を行う必要はありません。
また、SAML属性に入っている値を識別子にマッピングする場合は以下のように設定します。
この場合も特別なマッピングルールを作ったりプロパティの設定を行う必要はありません。
全体にAD FSを使うよりも楽に設定できる感覚があります。
◆Azure AD Premiumがない場合はどうなるか?
冒頭に書いた通り、上記はAzure AD Premiumのライセンスを保持している場合の設定の方法です。(具体的にはPremiumライセンスがないと、ギャラリーからカスタムアプリケーションの追加が出来ません)ただ、無償版であってもSAMLのエンドポイント自体は有効なので自力でSPを登録すれば、SAMLアプリケーションとのシングルサインオンを構成すること自体は可能です。
(現に、MS松崎さんがsimplesamlphpを使ったSPとの連携を無償版の機能だけで実現しています。関連ポストはこちら)
しかし、Oracle Cloudで同様の手順を実施したところ、SAMLアサーションの発行まではうまくいきますが、Oracle CloudのAssertion Consumer Serviceがうまくアサーションを受け取ってくれませんでした。
これは推測ですが、SAML SSOエンドポイントアドレスがPremiumでのカスタムアプリケーション追加で作成した場合はlogin.windows.net、無償版で作った場合はlogin.microsoftonline.comとなっており、自動的にリダイレクトされるので差異はないと思うのですが、微妙な機能差があるのかもしれません。(無償版のメタデータのエンドポイントをwindows.netに書き換えても同じエラーになるので違うのかもしれませんが)
参考までに手順と結果を載せておきます。(ここが間違ってるよ!という情報などあればぜひ!!)
まずはアプリケーションの追加をしますが、ギャラリーからではなく、組織で開発中のアプリケーションを選択します。
アプリケーションの種類はWebアプリケーションにします。
アプリケーションのプロパティには以下をセットします。
- サインオンURL : Oracle CloudのアサーションコンシューマサービスのURL
- アプリケーションID/URI : Oracle CloudのプロバイダID
次に、Oracle Cloud側にAzure ADの情報を設定しますが、ギャラリーからのアプリケーション追加ではないので、メタデータをウィザードから取得することが出来ません。
そこで、画面の下部にあるエンドポイントメニューよりFederationMetadataを取得し、Oracle Cloudへアップロードします。
このURLへアクセスし、表示されるXMLを保存します。
設定はこれで終わりなので、先ほどと同じ手順でテストをします。
尚、この手順で作成した場合はデフォルトではAzure AD側でのユーザ割り当ては不要です。
Start SSOをクリックすると同じくAzure ADのログイン画面へリダイレクトされます。
サインインすると、Oracle CloudのアサーションコンシューマサービスへSAMLアサーションがPOSTされますが、システムエラーが出てしまいます。
普通にOracle Access Managerなんですね。
SAML Tracerで上記のPremiumを使ったうまくいくパターンと無償版を使った失敗するパターンの両方のSAMLアサーションをトレースしてみたんですが、変わった点は見当たらず、何が原因なのかはよくわかっていません。
Oracle Cloud側へのAzure ADの情報登録もメタデータを使わず手動で構成したり、メタデータの不要な部分の削除など色々と試してはいるのですが、今のところ解決の糸口はつかめず。。。
◆まとめ
AD FSを使った場合に比べ、Azure ADをIdPとして使った場合は簡単に構成することが出来ます。しかし、以下の注意点があります。- Azure AD Premiumライセンスが必要
- Azure ADのログインIDはUserPrincipalNameなのでOracle CloudのログインIDとマッピングする際は値のフォーマットを合わせる必要がある