【Entra ID ハンズオン】無料でできるEntra IDによるSSO手順 (2/3)

# 1.はじめに

本記事は、以下記事の続編となっています。前回の記事では、RSA Test Service ProviderとEntra IDとのSAML連携を取り上げましたので、今回は、Salesforce Developer EditionとEntra IDとのSAML連携とSCIM連携のハンズオン手順に関して、説明いたします。

https://qiita.com/mokonacl/items/46ba1483341e8eb1ea39


# 2. Salesforce Developer Editionの環境作成

まずは、SalesforceのDefeloper Editionに登録するため、以下URLにアクセスし、必要情報を入力します。

https://developer.salesforce.com/signup

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/b6c2608c-4d73-80c1-6d62-ca89d93617a2.png)

必要情報の入力後、数分待っていると、メールを受信します。
このメール中には、「アカウントを確認」というリンクボタンがあるので、クリックしてアカウントの確認を完了させましょう。このアカウントは、システム管理者権限を有するので、今後のSalesforceの設定に利用致します。
また、払い出されたSalesforceの環境は、テナント単位でURLが異なっています。例えば、https://[テナント固有].develop.my.salesforce.com のようになっております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/dc56b927-68cc-58c7-ab09-073e91693510.png)

リンク先のページに遷移すると、ログイン用のパスワードを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/ab45d6ad-9873-f667-9400-878fe80a6ef8.png)

パスワード入力が完了しましたら、Salesforceの管理者画面にアクセスすることができます。
もし、ユーザ用のコンソール画面の場合は、右上の歯車のアイコンから、設定画面に移動することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/4ebf43aa-be43-04c4-115b-a98a4d910b22.png)

以下画像が設定画面です。サイドメニューを利用して各種設定をすることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/b94b29ae-c7ef-978c-fd7c-e9edfe302b5d.png)

# 3.SAML設定手順
### 3-1.Entra ID側のSSOの設定

それではSAML設定に実施していきます。まずは、Salesforceの設定画面において、サイドメニューから「設定 > 会社の設定 > 私のドメイン」をクリックします。画面中央に表示された「私のドメインの名前」をメモします。
今回はDeveloperエディションを利用しているためドメイン部分に [テナント固有]-dev-ed.developがついたドメインとなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/c84433dc-2397-33bc-8404-9cccda1459ed.png)

次に、Microsoft Entra 管理センターに移動して、「アプリケーション > エンタープライズアプリケーション」を選択して、ギャラリーの中からSalesforceを探して選択して、「作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/3566d6c9-25d6-be01-440c-795556c3b9bd.png)

「ユーザとグループ」で、SSO対象のユーザを追加しておきます。なお、Salesforce側にも同一のユーザを手動で作成するか、SCIMでEntra IDからSalesforce側にユーザを作成しておく必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/3191183e-572c-13e2-6b3e-78d3fc937aa2.png)

作成したアプリケーションの画面で、「シングルサインオン > SAML」を選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/be671c99-bfa0-c08e-a4e1-38482e1b3f43.png)

基本的なSAML構成において、Salesforceでメモをした情報を入力していきます。ここで入力する情報は、Salesforce側の私のドメイン通りで入力しましょう。Developerエディションでは、**-dev-ed.develop**.my.salesforce.com のように通常のテナントで生成されるドメインとは異なるドメインが割り当てられていますので、注意する必要があります。

<table>

  <thead>
    <tr>
      <th>名前</th> <th>値</th>
    </tr>
  </thead>
  <tr>
    <td> 識別子(エンティティID) </td> <td>[テナント固有]-dev-ed.develop.my.salesforce.com</td>
  </tr>
  <tr>
    <td> 応答URL (Assertion Consumer Service URL </td> <td>[テナント固有]-dev-ed.develop.my.salesforce.com</td>
  </tr>
    <tr>
    <td> サインオンURL </td> <td>[テナント固有]-dev-ed.develop.my.salesforce.com</td>
  </tr>
</table>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/66e5c280-bb1f-7f26-c249-9e10886d5df4.png)

次に「SAML署名証明書 > SAML応答とアサーションへの署名」を選択し、「保存」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/8d5503d6-91f3-669d-59fa-bec1e33f49cb.png)

「フェデレーション メタデータ XMLのダウンロード」を選択し、フェデレーション メタデータ XMLをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/a2ff643c-f1da-b79f-3646-08ceaffd7b08.png)

そして、「Salesforceのセットアップ」にあるログインURL、Microsoft Entra 識別子、ログアウトURLをメモしておきます。これらの情報は、Salesforce側に入力をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/292404b7-42ee-f115-bc1d-d026285e2c72.png)


### 3-2.Salesforce側のSSOの設定

それでは、Salesforce側のSAML設定を実施していきましょう。
まずは、「ID > シングルサインオン設定」から「編集」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/510308e8-940a-ec26-b6d5-d51c82878013.png)

「SAMLを有効化」にチェックを入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/3d0c08b6-b6b2-f65f-bcdb-2b041d5beda2.png)

それでは、「保存」を押し、１つ前の画面に戻り、「メタデータ ファイルから新規」 をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/bfd2e092-c745-6534-0db5-1d7acb78fdb4.png)

「ファイルの選択」 をクリックして、Entra管理センターからダウンロードしたフェデレーションメタデータ XML ファイルをアップロードし、「作成」 をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/9bd834ef-7515-ba12-4e11-b58e620a1d11.png)

すると、SAMLシングルサインオン構成の画面に遷移し、各フィールドが自動で設定されていることが確認できます。そのまま保存でも問題ないですが、「名前」のフィールドは、ユーザのログインフォームに表示される名前にもなるので、分かりやすい名前に変更しておいてもよいかもしれません。
また、画像下部にあるJIT（ジャストインタイムのユーザプロビジョニング）を設定すると、SP側(今回はSalesforce側)にユーザがなくても、Entra ID側にユーザがある状態で、Entra ID側のユーザを利用すれば、SP側にSAMLをする際にユーザを生成するようなことができるものとなります。今回はSCIMによるプロビジョニングをしたいため、設定はせずに完了としています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/1f1f438b-6386-01cd-4260-799b6e8d6e0c.png)

:::note info
ちなみに、手動で入力した場合は以下のような対応関係になります。
左がEntra ID管理センターのSAML設定画面で、右がSalesforceのSAMLシングルサインオン構成の画面です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/8d584b5f-31c9-e569-ba47-e302990e24f5.png)

さらに、エンティティID部分は、Salesforce自身を示します。具体的には、私のドメインに記載されているURLに、”"https://""を付け加えたURLとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/b930fd5b-ef36-81ac-24cb-642918a04b15.png)
:::

最後に、Salesforceの再度メニューで、「会社の設定 > 私のドメイン > 認証の構成 > 編集」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/dc576655-4021-6cd8-2a12-0047327c82da.png)

認証サービスのところで、先ほど作成した認証サービスにチェックを入れます。これで、ユーザがサインインする際のログインフォームに本SSO認証のログイン画面が表示されるようになります。
つまり、Salesforce自体は、SPとしては、複数のIdPと連携できるということでもあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/31b0f020-ee4b-d038-4dd8-f1b6d66e1ee0.png)

:::note info
IdP連携して、SAMLによってSalesforceにログインする際のログインフォームは以下のようになります。上の部分は、ユーザ名とパスワードによるログインとなっており、下の部分はSAMLによるログインになっています。さらに、複数のログインボタンがあるように、任意のIdPと連携したSAMLによるログインを実施することが可能となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/4ea087de-4794-5b65-7d31-33f299269451.png)
:::

# 4.SAMLの動作確認

### 4-1.SAML用のユーザ作成
では、salesforce側にユーザを作っておきます。このユーザは、Entra ID側のユーザ名がabc@abc.onmicorosoft.com　であれば、salesforce側も　abc@abc.onmicorosoft.com　というユーザ名にしておく必要があります。
Salesforceの設定画面で、「管理 > ユーザ > 新規ユーザ」を選択し、必要情報を入力し、ユーザ作成を完了します。その後、画面下部の「パスワードをリセットしてユーザに通知する」にチェックを入れると、作成したユーザにメール通知が実行されます。作成したユーザのメールボックスを確認し、メールが届いていましたら、メール中のパスワードを生成するリンクをクリックし、IDの検証を完了させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/2415e437-852d-adb2-ba23-38ff622627f7.png)

そして、対象となるユーザを、Entra IDにおいても、「アプリケーション > エンタープライズアプリケーション > [対象となるアプリ] > ユーザとグループ」から、割り当てておきましょう。
これでこのユーザを利用して、SalesforceにSAMLによるログインをすることができるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/9a7817d9-54ec-4a41-8302-ea4a04c43126.png)

### 4-2.SAML-tracerとは
SAMLの動作確認にあたって、Google chromeの場合は、SAML-tracerという拡張機能があります。
下記URLにアクセスしてGoogle chromeにインストールしてみましょう。 

https://chromewebstore.google.com/detail/saml-tracer/mpdajninpobndbfcldcmbpnnbhibjmch?hl=ja

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/cf807c00-b919-0e9a-e0ea-3d37472628da.png)

### 4-3.SAML-tracerを利用したSAMLのパケットキャプチャ

インストール後、拡張機能のアイコンをクリックすることで、SAML利用時のシーケンスを確認することができます。通常のパケットキャプチャ―と異なり、SAMLに関係するところを抽出して、重要なパラメータを抽出してくれたりします。
SAMLにおいて、重要な通信内容として、AuthnRequestとSAML Responseの２つがありますので、SAML-tracerを利用して、こちらの内容を見てみましょう。以下リンク先に簡単なシーケンス図を記載しています。

https://qiita.com/mokonacl/items/46ba1483341e8eb1ea39#3-1%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E8%A3%9C%E8%B6%B3sp-initiated-sso%E3%81%A8idp-initiated-sso


それでは、今回設定したSAMLのパケットを見てみます。以下は、SAMLにおけるAuthnRequestとなります。このAuthnRequestは、SP側から返されたAuthnRequest情報をIdP側、つまり、Entra ID側に渡している（リレーしている）ことがわかります。
Destinationと記載されている部分がEntra IDを示しており、AssertionConsumerServiceURLという部分が、Salesforce側のSAML Responseを返すところを示しております。そして、Issuerは、SP側のSalesforceになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/796e147e-2874-2fee-d05e-9b08713d7664.png)

次に、SAML Responseを確認します。このSAML Responseは、IdP側から渡されたAssertionをSP側に渡している（リレーしている）ことがわかります。実際のAssertion自体は、情報量が多いので、SAML-tracerのSummaryを見てみます。
今度は、Destinationが、Salesforce側になっており、IssuerがEntra IDになっています。
加えて、AttributeStatementのところには、Entra ID側のテナント情報に加えて、SAMLを利用したユーザ情報（emailaddressなど）も含まれていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/92a7bbaf-ecac-cf28-5525-09de15cb4d6c.png)

# 5.SCIM

### 5-1.SCIMとは
SCIMとは、System for Cross-domain Identity Managementの略称となります。例えば、Entra IDにあるユーザを自動で、Salesforceの方にユーザを作ることができます。先ほどの「4-1.SAML用のユーザ作成」では手動で、Salesforce側のユーザを作成しましたが、SCIMを利用することで自動でSalesforce側のユーザを作ることができます。

### 5-2. SCIMの設定手順

Salesfore側のユーザアイコン中にある「設定」をクリックします。今までは、歯車のところでしたら、ユーザアイコンのところにある設定を押すことに注意しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/7ce7b772-df78-5f9f-393c-8888a5656f4f.png)

「私の個人情報 > 私のセキュリティトークンのリセット」から、「セキュリティトークンのリセット」をクリックします。すると、ユーザにセキュリティトークン情報が送信されます。このセキュリティトークン情報をメモしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/266c1794-05b6-2f87-44f1-6af9bace12d6.png)

Entra管理センターに移動し、対象のアプリの「プロビジョニング」から「作業の開始」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/2cf0ce52-1af9-22e5-302f-39baa7a2abbd.png)

プロビジョニングモードを「自動」に変更し、管理ユーザ名、管理者パスワード、シークレットトークン、テナントのURLを入力します。このときのシークレットトークンは、先ほど発行したセキュリティトークンのこととなります。また、テナントのURLは、Salesforceの私のドメインのURLに、""https://""を付け加えたものとなっています。
入力後、プロビジョニング状態を「オン」にすることで、自動的に、Entra IDからSalesforceへのユーザプロビジョニングが開始されます。問題がない場合は、プロビジョニングログからユーザプロビジョニングの結果を確認することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256868/98a553ca-9256-0d53-3817-1ff3a366ff1b.png)

# おわりに

前回のRSA Test Service ProviderよりもSP側の設定が増えたため、少し大変だったかもしれません。SAMLの設定はパラメータが１つでも違うと動作しなくなってしまうため、設定に注意する必要があります。その際に、SAML-tracerを利用して、トラブルシュートを行うのも１つかと思います。
次回は、DocuSignのSSOの記事となります。

https://qiita.com/mokonacl/items/ae65d203c5213335fe2a