Salesforce
Salesforceを業務アセットとして接続するために必要な準備と、接続後に管理できる対象を説明します。Salesforce側での接続アプリケーションの作成と、リフレッシュトークンの発行が事前に必要です。
概要
YESODは、SCIMを使ってSalesforceのユーザーをプロビジョニングし、管理する機能を提供します。
| 参照先 | リンク |
|---|---|
| サービス概要 | Salesforce |
| APIドキュメント | SCIM を使用した Salesforce ユーザー ID の管理 |
対応するのは次の機能です。
- アカウントの作成・削除
- 割当の付与・剥奪。対象は次の4つです。
- グループ
- プロファイル
- 権限セット
- ロール
管理できること
| 機能 | 対応 |
|---|---|
| アカウント作成 | ○ |
| グループ付与 | ○ |
| ロール付与 | ○ |
接続方式は標準コネクタです。
接続に使う情報
| 入力項目 | 必須 | 入力する内容 |
|---|---|---|
| 「ネームスペース」 | 必須 | SalesforceのURLに含まれる組織固有の文字列 |
| 「クライアントID」 | 必須 | 接続アプリケーションのコンシューマー鍵 |
| 「クライアントシークレット」 | 必須 | 接続アプリケーションのコンシューマーの秘密 |
| 「リフレッシュトークン」 | 必須 | OAuthで発行したリフレッシュトークン |
| 「認証用URL」 | 任意 | 認可サーバーを変更するときに入力します。未入力の場合はlogin.salesforce.comです |
| 「ドメイン」 | 任意 | — |
任意の入力項目は、画面上のラベルの末尾に「(任意)」が付きます。
クライアントシークレットとリフレッシュトークンは第三者へ共有せず、安全な場所で管理してください。
接続の準備
接続する前に、Salesforceでネームスペースを確認し、接続アプリケーションを作成して、リフレッシュトークンを発行します。すべてSalesforce側での作業です。
ネームスペースを確認する
ネームスペースは、SalesforceのURLの一部です。
https://<ネームスペース>.lightning.force.comというURLであれば、<ネームスペース>の部分がネームスペースです。
クライアントIDとクライアントシークレットを取得する
-
ホーム画面の右上にある歯車のアイコンから、設定画面へ移動します。
-
検索欄に「アプリケーション」と入力して、「アプリケーションマネージャー」へ移動します。
-
右上の「新規接続アプリケーション」を選択します。
-
「接続アプリケーションを作成」を選択します。
-
次の項目を任意で設定します。
- 「接続アプリケーション名」
- 「API 参照名」
- 「取引先責任者 メール」
-
「OAuth 設定の有効化」にチェックを入れます。
-
「Web サーバーフローの秘密が必要」にチェックが入っていることを確認します。
-
「コールバック URL」を入力します。
-
「選択した OAuth 範囲」に次の2つを追加します。
- 「API を使用してユーザーデータを管理 (api)」
- 「いつでも要求を実行 (refresh_token, offline_access)」
次の2つはチェックが入っていても構いませんが、必須ではありません。
- 「サポートされる認証フローに Proof Key for Code Exchange (PKCE) 拡張を要求」
- 「更新トークンフローの秘密が必要」
-
「保存」ボタンをクリックします。 接続アプリケーションが作成されます。
-
「アプリケーションマネージャー」画面で、作成したアプリケーションの「参照」を選択します。
-
「コンシューマーの詳細を管理」を選択します。 確認コードの入力を求められます。
-
受信した確認コードを入力します。 「コンシューマー鍵」と「コンシューマーの秘密」が表示されます。
「コンシューマー鍵」がYESODの「クライアントID」、「コンシューマーの秘密」がYESODの「クライアントシークレット」にあたります。
「コンシューマーの詳細を管理」へ何度も移動して確認コードの送信を繰り返すと、ロックされることがあります。ロックされると「コンシューマーの詳細を管理」へ移動できません。1時間ほど待つとロックが解除されます。詳しくは確認コードを受信できないを参照してください。
認証用URLを確認する
「認証用URL」は、Salesforceの認可サーバー(認証エンドポイント)を変更するときに使います。未入力の場合は本番環境のlogin.salesforce.comが使われます。
Sandbox環境などを利用する場合は、「認証用URL」にtest.salesforce.comと入力してください。そのほかの入力項目は、通常どおり入力します。
入力できるのはlogin.salesforce.comとtest.salesforce.comだけです。カスタムドメインには対応していません。
リフレッシュトークンを取得する
-
次のURLをブラウザーで開きます。
${client_id}にはクライアントID、${redirect_uri}にはコールバックURLを指定します。https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=${client_id}&redirect_uri=${redirect_uri} -
アクセスを許可します。
codeが発行されます。codeの有効期限は15分です。期限が切れた場合は、発行し直してください。詳しくはOAuth 2.0 Web サーバーフローを参照してください。 -
ターミナルで次のコマンドを実行します。
${code}には手順2で取得したcode、${client_id}にはクライアントID、${client_secret}にはクライアントシークレット、${redirect_uri}にはコールバックURLを指定します。curl --location --request POST 'https://login.salesforce.com/services/oauth2/token?grant_type=authorization_code&code=${code}&client_id=${client_id}&client_secret=${client_secret}&redirect_uri=${redirect_uri}' | jq
レスポンスに含まれるrefresh_tokenの値が、YESODの「リフレッシュトークン」にあたります。
{
"access_token": "<アクセストークン>",
"refresh_token": "<リフレッシュトークン>",
"signature": "<署名>",
"scope": "refresh_token api",
"instance_url": "https://<ネームスペース>.my.salesforce.com",
"id": "https://login.salesforce.com/id/<組織ID>/<ユーザーID>",
"token_type": "Bearer",
"issued_at": "<発行日時>"
}
接続する
「業務アセット」画面から「SaaS接続」画面を開くまでの手順は、業務アセットを追加するを参照してください。
-
「SaaS接続」画面で「Salesforce」を選択します。 接続画面が表示されます。
-
「ネームスペース」「クライアントID」「クライアントシークレット」「リフレッシュトークン」を入力します。
-
Sandbox環境などに接続する場合は、「認証用URL」を入力します。
-
「名寄せに使用する項目」で、接続先サービス側の項目を「メールアドレス」または「ユーザー名」から選択します。 名寄せの考え方はアカウントとメンバーの名寄せを参照してください。
-
「接続」ボタンをクリックします。 同期が完了すると、業務アセットが作成されます。
接続画面には「管理者権限を持ったアカウントで[接続]してください。」と表示されます。Salesforceの管理者権限を持つアカウントで発行した資格情報を使ってください。
アカウントの作成
Salesforceに同一のユーザー名のアカウントが存在するかどうかに応じて、次のように動作します。
| Salesforceの状態 | 動作 |
|---|---|
| 同一のユーザー名のアカウントがSalesforceに存在しない | アカウントを新規作成します |
| 同一のユーザー名で有効になっているアカウントがSalesforceに存在する | そのアカウントの情報を更新します |
| 同一のユーザー名で停止しているアカウントがSalesforceに存在する | そのアカウントを有効にして情報を更新します |
アカウントの削除
Salesforceのアカウントの使用状態を無効に設定します。ユーザーの完全削除ではありません。
割当種別
| 割当種別名 | タイプ | 割当項目 | 説明 |
|---|---|---|---|
| 「グループ (Regular)」 | 複数のグループに所属させる | Salesforceの公開グループ | 「ユーザーの管理」>「公開グループ」ページで設定できる項目です |
| 「グループ (Queue)」 | 複数のグループに所属させる | Salesforceのキュー | 「ユーザーの管理」>「キュー」ページで設定できる項目です。動的な割当種別です |
| 「プロファイル」 | 優先度の高いグループに所属させる | Salesforceのプロファイル | ユーザーの編集画面の「ユーザーライセンス」「プロファイル」を指定できます |
| 「権限セット」 | 複数のグループに所属させる | Salesforceの権限セット | 「ユーザーの管理」>「権限セット」ページで設定できる項目です |
| 「ロール」 | 優先度の高いグループに所属させる | Salesforceのロール | ユーザーの編集画面の「ロール」を指定できます |
Salesforceの権限セットは、YESODの権限セットとは別のものです。この節ではSalesforce側の権限セットを指します。
グループ (Queue)
キューは、リードやケースを一時的に保管しておく待ち行列です。割当を使って、キューへのアクセス権限を割り当てられます。
「グループ (Queue)」は動的な割当種別です。Salesforce側にキューが存在するときだけ、割当種別として取り込まれます。Salesforceのデフォルトではキューは存在しません。
Salesforce側でキューを削除して同期し直すと、割当種別からも削除されます。削除されると、タスク実行ログにも表示されなくなります。削除後に改めてキューを作成して割当を取り込んでも、別のものとして扱われるため、過去のタスク実行ログは表示されません。
プロファイル
ユーザーライセンスごとに、選択できるプロファイルが決まっています。プロファイルを1つ選ぶと、それに対応するユーザーライセンスが1つ自動的に決まります。
アカウントの作成時には、優先度が最も低い割当を設定します。
Salesforceの仕様上、選択されているユーザーライセンスによってはプロファイルを設定しない選択もできます。ただしYESODを通じてプロファイルを設定しないようにはできません。必ずいずれかのプロファイルを指定してください。
権限セット
Salesforceの権限セットは、各種機能のアクセス権をまとめて管理する仕組みです。割り当てたユーザーに、その権限セットで管理している権限をまとめて付与します。ユーザーのプロファイルを変更せずに、ユーザーの機能アクセス権を拡張できます。
SalesforceのAPIの仕様上、一度いずれかの項目を付与すると、すべての権限セットを完全に剥奪できなくなります。
- 2つ以上付与されている場合は、1つまで減らせます。
- 1つだけ付与されている状態で、その権限セットを剥奪できません。
- 最後の権限セットを剥奪する場合は、タスクをスキップして、Salesforceの管理画面から剥奪してください。
- アカウントの削除タスクと権限セットの剥奪タスクをまとめて一括実行した場合、剥奪のタスクは実行せずに完了状態へ変わります。削除タスクだけが実行されます。
最後の1件を剥奪しようとすると、次のエラーが表示されます。
YESOD から 権限セット を全て剥奪することはできません。
このタスクをスキップして Salesforce の管理画面から剥奪してください。
割り当てたライセンスによって、付与できる権限セットが異なります。ライセンスで対応していない権限セットを割り当てようとすると、エラーが発生します。
付与されている必要があるライセンスは、Salesforceの権限セットの一覧と詳細画面で確認できます。


ロール
割当項目には、Salesforceのロールに加えて<未指定>が表示されます。<未指定>を割り当てると、アカウントのロールが未設定になります。
同期する項目
SalesforceはSCIMに準拠しています。同期できる項目は、REST API と SCIM 属性の対応付けを参照してください。
カスタム項目を同期する
カスタム項目は、Salesforceの組織IDとAPI参照名を組み合わせたURNで指定します。
-
Salesforceの管理画面で「組織プロファイル」>「組織情報」を開きます。 組織IDが表示されます。組織IDはURLにも表示されます。
-
組織IDを控えます。 組織IDが15桁の場合は、15桁 → 18桁変換ツールで18桁の形式に変換して控えます。
-
Salesforceの「サイドバー」から「ビルド」>「カスタマイズ」>「ユーザ」>「項目」を選択します。 「ユーザ項目」画面が表示されます。
-
画面下部の「ユーザカスタム項目」までスクロールします。
-
同期対象のカスタム項目の「API参照名」を控えます。
-
YESODの「同期する項目」で、次の形式のURNを指定します。
urn:salesforce:schemas:extension:<組織ID>.<API参照名><組織ID>には18桁の組織ID、<API参照名>には手順5で控えたAPI参照名を入れます。