Salesforce Experience CloudとAuth0でCIAMはじめの一歩

本記事はIDaaS アドベントカレンダー2022の17日目の記事です。
この記事ではSalesforce Experience CloudとAuth0を連携させてCIAMを実現するはじめの一歩について記載しています。

# Salesforce Experience Cloudって何？
CRM領域でトップシェアを誇るSalesforceが提供するWebサイト構築ツールです。
Salesforceのプラットフォーム上にWebサイトを構築し、Salesforce内のデータを外部に公開します。
顧客からの問い合わせや注文の管理、パートナーへの商談共有など、顧客やパートナーと直接情報共有する為に広く利用されています。

[Experience Cloud - セールスフォース・ジャパン - Salesforce](https://www.salesforce.com/jp/products/experience-cloud/overview/)
[Experience Cloud - Salesforce Help](https://help.salesforce.com/s/articleView?id=sf.networks_overview.htm&type=5)

# Auth0って何？
IDやパスワード管理、アクセス制御をクラウド上で行う、IDaaS(Identity as a Service)と呼ばれる分野のクラウドシステムです。
OAuthやOpen ID Connectなど認証認可の仕様をラップした機能を提供しており、比較的容易にセキュアなアクセス制御を実現することが可能です。
Auth0を利用することで、一つのID・パスワードで自社の全サービスを提供して顧客体験を向上させたり、パスワードの使い回しによるセキュリティリスクを防ぐなど、さまざまなメリットに繋がります。

[Auth0,Inc.](https://auth0.com/jp)

# CIAMって何？
CIAMとは、Customer Identity and Access Managementの略で、サイアムまたはシーアイエーエムと読みます。
顧客・一般消費者のID管理に特化したサービスおよびソリューションです。
スマートフォンが普及してオンライン上での行動範囲が拡大した結果、複数のサービスのID連携やセキュリティ向上、顧客情報の統合が求められるようになり、それを解決する方法として注目されています。

# Salesforce Experience CloudとAuth0を実際に連携させてみる
という事で、Salesforce Experience CloudとAuth0のトライアル環境を取得して実際に連携させてみました。
手順は以下の通りです。

### Auth0の設定その１
1. [Auth0](https://auth0.com/jp)のトライアル環境を取得します。
1. Auth0にログインしたら左メニューのApplications > Applicationsを押下してApplications画面に遷移します。
1. Create Applicationをボタンを押下します。
1. Nameに任意の値を入力します。
1. Regular Web Applications を選択します。
1. Createボタンを押下します。
1. アプリケーションが作成されたら、Settingsタブを開きます。
1. Client IDとClient Secretをコピーして保存しておきます。
1. 画面下部のAdvanced Settingsを開きます。
1. Endpointsタブを開きます。
1. OAuth Authorization URL、OAuth Token URL、OAuth User Info URLをコピーして保存しておきます。
1. 左メニューのBranding>Universal Loginを開きます。
1. Advanced Optionsを押下します。
1. Loginタブを押下します。
1. Customize Login PageをONにします。
1. HTML内の var lock = new Auth0Lock(config.clientID, config.auth0Domain, {・・・})の第三引数に下記のコードを追加します。
    ```
    ,additionalSignUpFields: [
        {
          name: "family_name",
          placeholder: "Enter your family name",
          storage: "root"
        },
        {
          name: "given_name",
          placeholder: "Enter your given name",
          storage: "root"
        }
    ]
    ```
1. PreviewのSign upタブを見ると項目が追加されているはずです。
1. 一旦ここまで。

### Salesforceの設定
1. [Salesforce Developer Edition](https://developer.salesforce.com/jpblogs/2016/04/developer-edition-signup/) 環境を取得します。
1. Salesforce環境にログインしたら、Pilots Association という名前の取引先を作成しておきます。動作確認時に必要になります。
1. 設定画面に遷移します。
1. [ヘルプ](https://help.salesforce.com/s/articleView?id=sf.identity_scip_integrate_exp_cloud.htm&type=5)のサンプルコードをコピーしてApexクラスを作成します。
1. クイックメニューからID>認証プロバイダに遷移します。
1. 新規ボタンを押下して認証プロバイダ作成画面に遷移します。
1. 以下の通り入力します。
    - プロバイダタイプ：Open Id Connect
    - 名前：Auth0
    - URL接尾辞：Auth0
    - コンシューマ鍵：[Auth0のClient ID]
    - コンシューマの秘密：[Auth0のClient Secret]
    - 承認エンドポイントURL：[Auth0のOAuth Authorization URL]
    - トークンエンドポイントURL：[Auth0のOAuth Token URL]
    - ユーザ情報エンドポイントURL：[Auth0のOAuth UserInfo URL]
    - デフォルトの範囲：openid profile email
    - 登録ハンドラ：[先ほど作成したApexクラス]
    - 他のアカウントで登録を実行：[任意のユーザ]
1. 保存ボタンを押下します。
1. 画面下部にURLが生成されています。Experience Cloud サイト>コールバックURLをコピーして保存しておきます。後ほどAuth０に登録します。
1. クイックメニューからデジタルエクスペリエンス>すべてのサイトに遷移します。
    - デジタルエクスペリエンスを有効化していない場合は先に有効化します。
1. 新規ボタンを押下してエクスペリエンスサイト作成画面に遷移します。
1. カスタマーサービスのテンプレートを選択します。
1. 使用を開始するを押下します。
1. 名前、URLに任意の値を入力します。
1. 作成を押下します。
1. サイトが作成されると自動的にエクスペリエンスサイトのワークスペースに遷移します。
1. ビルダー画面に遷移し、サイトを公開します。
1. 管理画面に遷移し、サイトを有効化します。
1. 管理>メンバー画面に遷移し、選択済みプロファイルに「External Identity User」を追加して保存します。
1. 管理>ログイン&登録画面に遷移し、ログインページ設定で「Auth0」にチェックをつけ、「ユーザ名およびパスワード」のチェックを外して保存します。

# Auth0の設定その2
1. Auth0にログインします。
1. 左メニューのApplications > Applicationsを押下してApplications画面に遷移します。
1. 先ほど作成したアプリケーションを開きます。
1. Settingsタブに遷移します。
1. Allowed Callback URLsに、Salesforceで生成されたコールバックURLを登録して保存します。

# 動作確認
1. Experience CloudサイトのURLをコピーし、Salefsorceからログアウトします。
1. ブラウザの検索バーにURLをペーストしてExperience Cloudサイトに遷移します。
1. Auth0のログイン画面に転送されます。
1. Sign upタブを開きます。
1. メールアドレス、パスワード、氏名を入力してサインアップします。
1. 成功するとExperience Cloudサイトが表示されます。
1. Auth0とSalesforceを見ると、それぞれユーザが登録されています。

# まとめ
いかがでしょうか？
Auth0とSalesforceのほぼ標準機能だけでID連携を簡単に実現できました。
実際のプロジェクトではより多くの検討が必要となりますが、CIAMへの第一歩が踏み出せたかと思います。
他システムの顧客IDもAuth0などのIDaaSに寄せて、顧客体験の向上と顧客情報の統合を進めていきましょう。