#はじめに
Azure と Oracle Cloud が相互連携できるようになった、というアナウンスは記憶に新しいかと思いますが、下記弊社 Blog にもありますとおり、アプリケーション レベルでも、SAML 連携及びユーザー プロビジョニングがサポートされるようになったとアナウンスされましたので、早速試してみたいと思います。
Using Azure AD with your Oracle Cloud apps
URL:https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Using-Azure-AD-with-your-Oracle-Cloud-apps/ba-p/683915
長時間検証した挙句ですが、今回追加されたエンタープライズ アプリケーションの中にはシングル サインオンさせたい対象のアプリケーションは登録されていませんでした。
上記 Oracle IDCS (Oracle Identity Cloud Service) のコンソール画面(トップページ) に遷移するための、アプリケーションがない(Oracle Cloud Infrastructure Consoleだと思ってましたが、検証した結果それとも違いました)ので、「ギャラリー以外のアプリケーション」からアプリケーションを登録し、シングル サインオンさせる環境を作りました。
なにぶん弊社の公開情報も出ていないので、手探り状態となりますがご容赦ください。
#Oracle Cloud 評価版を用意する
URL:https://myservices.us.oraclecloud.com/mycloud/signup?language=ja にアクセスし、30日間の無料クレジットを入手します。
アカウント詳細の入力にて必要な情報を入力します。
「クラウト・アカウント名」がアカウント URL に使用する、とあるので、Salesforceの「私のドメイン」のように一意の URL になるように設定する必要があります。
※今のところホーム・リージョンは「東京」を選択しない方がいいと思います。
環境ができあがるまでに恐ろしく時間がかかりました(15分なんていうレベルではありません)
アメリカのいずれかのリージョンを選択しましょう。
アカウント詳細の入力で入力した携帯電話番号に検証コードが送られてくるので、コードを入力し、「コードの確認」をクリックします。
ここで注意してほしいのが携帯電話の入力方法です。
モバイル番号の国種別は日本「81」にします、そして実際の電話番号は090もしくは080から入力するのが一般的ですが、最初の「0」は省かないとコードは届きません。例えば携帯電話が「09012345678」だった場合、入力する番号は「9012345678」にします。
そのようにしないといくら待ってもコードが届きませんのでご注意ください。
(外資系の会社に勤めているとすぐ気づくのですが…)
クレジット・カード詳細の追加画面にて「クレジット・カード詳細の追加」をクリックします。
登録に最大15分かかるということなので、アカウントが作成されるまで待ちます。
Oracle Cloud 側のシングル サインオン設定
Oracle から環境準備のメールが来たらリンクを踏んで、テンポラリパスワードを変更します。
その後、下記画面ショットのとおり、言語とタイムゾーンを設定する画面が表示されるので、日本語環境に変更します。
コンソール画面にアクセスするためには、https://idcs-xxxx.identity.oraclecloud.com/ui/v1/adminconsole のような adminconsole を直接叩きます。
管理画面サインイン後に、左ペインから「Security」→「Identiy Providers」の順にクリックします。
Name 欄に「Azure Active Directory」と入力し「Next」をクリックします。
Azure AD のSAML 署名証明書欄で「フェデレーション メタデータ XML」の「ダウンロード」リンクをクリックして入手したメタデータファイルをアップロードします。「Next」をクリックします。
Mapの項目で下記のように設定します。
Identity Provider User Attribute :Name ID
Oracle Identity Cloud Service User Attribute:Username
Requested NameID Format:
Export にて、SP Metadata をダウンロードできそうですね。
つまりこのメタデータをダウンロードして、 Azure AD 側にアップロードすれば、Entity ID や ACS などが自動的に設定されるようです。
「Download」をクリックし、任意のフォルダダウンロードします。
最後に Activate をクリックし、Azure AD を IdP として設定を完了させます。
You have activated the Idntity Provider. と表示されるのを確認し、「Finish」をクリックします。
Identity Providers の一覧に Azure Active Directory と表示されることを確認します。
Azure AD 側のシングル サインオンの設定
エンタープライズ アプリケーションより、「+新しいアプリケーション」を選択します。
アプリケーションの追加画面にて、「ギャラリー以外のアプリケーション」をクリックします。
名前に任意の名前(今回は Oracle Identity Cloud Service Consoleと入力しています)を入力し、「追加」をクリックします。
シングル サインオン方式の選択より「SAML」をクリックします。
画面上部の「メタデータ ファイルをアップロードする」をクリックします。
Oracle Cloud 側でダウンロードしたメタデータを選択し「追加」をクリックします。
値が自動入力されたことを確認し、「保存」ボタンをクリックします。
一通り設定が入ったので、画面左の「ユーザーとグループ」から Oracle Cloud にシングル サインオンさせたいユーザーを割り当てます。
今回は、プロビジョニング機能を使わないので、Oracle Cloud 側に同一のユーザーを用意します。
Oracle Cloud のユーザー管理画面より、画面右の「追加」をクリックします。
電子メールをユーザー名として使用にチェックを入れ、「次へ」をクリックします。
マイ・ロールの設定画面で、各種サービスへのロールを割り当てます。
実際に運用する際には各ユーザーごとに細かくロールを割り当てる必要がありますが、今回は動作検証なので、管理者ロールを割り当てます。
画面右上の「終了」をクリックします。
ハマり箇所まとめ
ユーザーは Federated にするかどうかがよく分からなかったのですが、最終的には、デフォルト値(No)のままでよく、Authenticated By の箇所も OICS のままで問題ないようです。今回のシングル サインオンは IdP-Initiated になりますが、問題なく Azure AD から SAML Response を返していました。
IDP Policies は設定不要?
Identity Providers の設定に Azure AD を追加しないと SAML 認証できないと思いましたがそんなことはありませんでした。
一体この設定は何のために必要なのかは結局分からず。
Show on Login Page を有効にすると、サインイン画面のトップページにアイコンが追加される。
こんな感じで、Identity Provider の項目で追加した Azure Active Directory のアイコンが追加されます。
直接資格情報を入力するか、Azure Active Directory にリダイレクトして Azure AD ユーザーで認証要求をさせるかどうか、いずれかを選べるようになります。
#シングル サインオンのテスト
アクセス パネル(myapps.microsoft.com)にアクセスします。
設定した OICS Console のアイコンをクリックします。
コンソール画面にシングル サインオンできることを確認します。
上記画面から Admin Console にアクセスするためには、右上のアカウントメニューより、「Admin Console」をクリックします。
すると、下記画面ショットのとおり、OICS のコンソール画面に遷移します。
おまけ
いつもの SAML Request と SAML Response を転記します。
SAML Request
<samlp:AuthnRequest xmlns="urn:oasis:names:tc:SAML:2.0:metadata" ID="F84D888AA3B44C1B844375A4E8210D9E" Version="2.0" IssueInstant="2019-06-16T08:06:51.775Z" IsPassive="false" AssertionConsumerServiceURL="https://idcs-4087474b8d694d1fa3b4e89b95ee3557.identity.oraclecloud.com/fed/v1/sp/sso" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://idcs-4087474b8d694d1fa3b4e89b95ee3557.identity.oraclecloud.com/fed</Issuer>
<samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">
</samlp:NameIDPolicy>
</samlp:AuthnRequest>
SAML Response
<samlp:Response ID="_349211b0-dfaa-4287-a6f7-d62d2f568089" Version="2.0" IssueInstant="2019-06-16T08:45:52.608Z" Destination="https://idcs-4087474b8d694d1fa3b4e89b95ee3557.identity.oraclecloud.com/fed/v1/sp/sso" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/ca90ee67-329e-4615-b7a1-b2e158252733/</Issuer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<Reference URI="#_349211b0-dfaa-4287-a6f7-d62d2f568089">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<DigestValue>69CcshvkIdR7nW5MRDYeMB0VSw7zI+3ENw5VsdckgKk=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>JP+VJUyn2wuH29xlwxhy6FDrSN7s/y1wNdGbxbrP45TkbczcN1YC89op9Gf7xBKw2Zqa/ID1fLH0s3He48gVHI3xQt7inn3bD6BY9loPvYJZTuLzQbCw/LSoMG6D36SE4SCdGPRg0dFMbXgrSCC5Pwy2IqKlm8Gz4+xQ/hACt8poCvlIP1MmqUR/Q/jPuf7Py7AfkuqEf4nINEm9dkkts35GErewv98oOJaJtZUK0ygKSAQ99lPnM4492WKDddcGjNJQvLgJEwhZfweeQqKl/emP7pAj0hqmbyvx+zlAsgs3o3h9oeqLk+Qs14IEMwlrpwguWnpOPyJu5bfL2v/lDg==</SignatureValue>
<KeyInfo>
<ds:X509Data xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Certificate>MIIC8DCCAdigAwIBAgIQciUer//364pAfvCgmB1c1zANBgkqhkiG9w0BAQsFADA0MTIwMAYDVQQDEylNaWNyb3NvZnQgQXp1cmUgRmVkZXJhdGVkIFNTTyBDZXJ0aWZpY2F0ZTAeFw0xOTA2MTYwNjI1MjFaFw0yMjA2MTYwNjI1MjFaMDQxMjAwBgNVBAMTKU1pY3Jvc29mdCBBenVyZSBGZWRlcmF0ZWQgU1NPIENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmoOCTf8XlICrFKoeYrqhsquMs8Y7g5qBwJifzER5RL+e2/PotGH6hmwF5MpvaMEtnFQY5ET8fyeX3RlEUrhjioMujjjRrecG7YVeWVmzh2jIUupXvtZ7e05bBzjonK/oQOeWxEnIKw8u8C6or85/9ngLBvp9ateAvSdVaA+K/a+7cFEXqte+SuZdwaqCvDYNFqVRtsLTxAlV0UcoB5nMgFl/Xf2LfFif6aooK2bApGc9WExpcaNgjTI+2IuVBqy0eONr7RAjEjvyHqpulHctor+cgUVpJe4U1v7BaIaLDlyrgOYs5Iwu7OpBUfbH81AEkZLoaq4KdA9a5AiG8VgAPQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQArGlsn7d9dPWJjQFtOQv+oy0zHSgAitDs+J8qBHGgcsaVE1cR5778woHWOBoEYrqg8uM9pM04cI51cHzteBdrlQXOya04W8+N4umGuyMGDfMe9TQ860lYhUBVGoPRtXRgzTnrIQq4v5h0HPbD4hLOv2QTZogDlpn7jzJKara2dt5S1aDiEIA5N/tH3DYbPZOkC128vGDt4qVMFo2rSbmeKwldEBNGjgKRvnVZPrS0t8ReuAtKt6B8tP+VGcmhHED0irruhtzqTJILqUx+FJWjf2d2y6ANeFO7aCAn9wjlDafDMeCH5YEOTxM65IIMxU5H9KUuaYKz/AzpplJ/0TY/3</ds:X509Certificate>
</ds:X509Data>
</KeyInfo>
</Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<Assertion ID="_e6265e4c-d608-4371-bd56-2556d5572300" IssueInstant="2019-06-16T08:45:52.592Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>https://sts.windows.net/ca90ee67-329e-4615-b7a1-b2e158252733/</Issuer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<Reference URI="#_e6265e4c-d608-4371-bd56-2556d5572300">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<DigestValue>dLAFB0Mc4pw4683qto+FWBQkHB+lqPVL0JxlooYHvYM=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>UJbugxnnjBiu1y/3iBT8F0soZAzz8bcihnp/a/FFxsBMDB/jnxMqko/+RUx0rWiD2dCjnJANm5/3wNugOeHei4uZaIuMfkyKXQBNGZ0xRWvNyATf1gKZkBjS9L4lWl8AF3ZKm7T9bUHtpysCYzs4YoPh/tAXcyFy4NpHybvlVdzFse/MdfgtfkCh7gXqEooPixkn5YtIr6QVcsvy75DgQD80JDK+V+7jH+t5sL7yj+l4F8Iaf/srePz03+LwkNDoIjX7MXoNK9LmtnU/Bt3jNb4OV157tvxZBLoFNvWIxP32R+Aygfd1rnjyNxmRMZw8W1jUy+ntqS9bJpDCUmCMhQ==</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIIC8DCCAdigAwIBAgIQciUer//364pAfvCgmB1c1zANBgkqhkiG9w0BAQsFADA0MTIwMAYDVQQDEylNaWNyb3NvZnQgQXp1cmUgRmVkZXJhdGVkIFNTTyBDZXJ0aWZpY2F0ZTAeFw0xOTA2MTYwNjI1MjFaFw0yMjA2MTYwNjI1MjFaMDQxMjAwBgNVBAMTKU1pY3Jvc29mdCBBenVyZSBGZWRlcmF0ZWQgU1NPIENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmoOCTf8XlICrFKoeYrqhsquMs8Y7g5qBwJifzER5RL+e2/PotGH6hmwF5MpvaMEtnFQY5ET8fyeX3RlEUrhjioMujjjRrecG7YVeWVmzh2jIUupXvtZ7e05bBzjonK/oQOeWxEnIKw8u8C6or85/9ngLBvp9ateAvSdVaA+K/a+7cFEXqte+SuZdwaqCvDYNFqVRtsLTxAlV0UcoB5nMgFl/Xf2LfFif6aooK2bApGc9WExpcaNgjTI+2IuVBqy0eONr7RAjEjvyHqpulHctor+cgUVpJe4U1v7BaIaLDlyrgOYs5Iwu7OpBUfbH81AEkZLoaq4KdA9a5AiG8VgAPQIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQArGlsn7d9dPWJjQFtOQv+oy0zHSgAitDs+J8qBHGgcsaVE1cR5778woHWOBoEYrqg8uM9pM04cI51cHzteBdrlQXOya04W8+N4umGuyMGDfMe9TQ860lYhUBVGoPRtXRgzTnrIQq4v5h0HPbD4hLOv2QTZogDlpn7jzJKara2dt5S1aDiEIA5N/tH3DYbPZOkC128vGDt4qVMFo2rSbmeKwldEBNGjgKRvnVZPrS0t8ReuAtKt6B8tP+VGcmhHED0irruhtzqTJILqUx+FJWjf2d2y6ANeFO7aCAn9wjlDafDMeCH5YEOTxM65IIMxU5H9KUuaYKz/AzpplJ/0TY/3</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
<Subject>
<NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">test001@shyamag015.onmicrosoft.com</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2019-06-16T08:50:52.608Z" Recipient="https://idcs-4087474b8d694d1fa3b4e89b95ee3557.identity.oraclecloud.com/fed/v1/sp/sso" />
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2019-06-16T08:40:52.592Z" NotOnOrAfter="2019-06-16T09:40:52.592Z">
<AudienceRestriction>
<Audience>https://idcs-4087474b8d694d1fa3b4e89b95ee3557.identity.oraclecloud.com/fed</Audience>
</AudienceRestriction>
</Conditions>
<AttributeStatement>
<Attribute Name="http://schemas.microsoft.com/identity/claims/tenantid">
<AttributeValue>ca90ee67-329e-4615-b7a1-b2e158252733</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
<AttributeValue>a85ac278-86e3-41b2-8a6e-30c1c5aa0a5d</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/displayname">
<AttributeValue>test001@shyamag015.onmicrosoft.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/identityprovider">
<AttributeValue>https://sts.windows.net/ca90ee67-329e-4615-b7a1-b2e158252733/</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/claims/authnmethodsreferences">
<AttributeValue>http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/password</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress">
<AttributeValue>test001@shyamag015.onmicrosoft.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>test001@shyamag015.onmicrosoft.com</AttributeValue>
</Attribute>
</AttributeStatement>
<AuthnStatement AuthnInstant="2019-06-16T08:14:20.670Z" SessionIndex="_e6265e4c-d608-4371-bd56-2556d5572300">
<AuthnContext>
<AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
</Assertion>
</samlp:Response>
#まとめ
今現在Azure AD と Oracle Cloud で SAML 連携し、シングル サインオン構成するドキュメントはまだ揃いきっていない状況ですが、じきに整備されてくると思います。
基本的に公開情報がない状態で作業を行うと間違いなくハマるので、検証レベルであれば問題ないですが、本番環境と構築するのであれば、私と同じ轍を踏まないようにドキュメントが整備されてから作業をされた方が良いかと思います。
最後まで読んでいただきましてありがとうございました。