はじめに
- Winter'24からフローからAPIコールアウトができるようになった
- 相当複雑でなければApexをいちいち書かなくて良くなった
- コールアウトやってみた系の記事は多いのだが、外部サービスへのコールアウトが多く、Salesforce APIを組織からコールアウトするHow toが少なかったため作成
1. 接続アプリを作成する
- API Call時の認証アプリを作る
- Salesforce APIは認証が必須のため
- 例はOAuth設定を有効化し、選択したOAuth範囲を
いつでも要求を実行
とフルアクセス
としている - コールバックURLは作成時はなんでもよい(あとで変更する)
- 作成後、コンシューマーキーと秘密を取得(コピー)しておく
2. 認証プロバイダの作成
- 接続アプリで使用する認証プロパイダーの作成
- 接続アプリで指定したコンシューマーキーと秘密、OAuthの範囲を指定する
- 作成したら、下記の[Salesforce 設定]のコールバックURLを1.接続アプリのコールバックURLに設定しておく
3. 外部ログイン作成
- 設定 > 指定ログイン情報のタブから外部ログイン情報を先に作成する
- 認証プロバイダーは2.で作成したものを使用(そして認証プロトコルはOAuth 2.0)
3-1. プリンシパルを作成
- ID種別: 指定ユーザとして作成
- 設定された認証プロバイダーを使って[認証]を行う
- 正しく設定されていれば、認証状況が認証済みになる
4. 指定ログイン作成
- フローでのコールアウトで使用するURIと3.で作成した外部ログイン情報を設定する
Connect REST APIのInstace名について
- 今回、例としてScheduling APIを設定した。例えばこちらのAPIになるのだが、リソースが
https://yourInstance.salesforce.com/services/data/v59.0/connect/scheduling/waitlist-checkin
という風になっており、このyourInstance
が何なのかハマってしまった。 - 単純に設定 > 私のドメイン > 現在の [私のドメイン] の URL でよかったオチである
- 下記のような方法もあるらしく、参考にどうぞ
curl
curl -X POST 'https://yourInstance.my.salesforce.com/services/oauth2/token' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'grant_type=client_credentials' \--data-urlencode 'client_id=3MVG9wt4IL4O5wvIwuDUz4YUlU.pQ2qL9PA5YrVvkAxtBkMRcDwEDN9inEg3ujTTrZRbl2KnRD7F8iFxxxxx' \--data-urlencode 'client_secret=B5E4AA8F293C052D96C9010866AAXXXXXX6E4A16CA5250806BE943A5F1E7360'
return. IDは適当にしてある
{"access_token":"00D5i000002OxQr!ARQAQF3EywD2Pzde2D7_ie.vZTZY3sG95ExZ6z.Gn8hFR3o.DiWgOBdGhKJWGEAT7IMBCk1zslR.9Pqboxaz_rBgFzDbpA1B","signature":"QrLexiLQ8PN0ncptHASq/iMwhSydslmbimq7A1YV5R8=","instance_url":"https://yourInstance.my.salesforce.com","id":"https://login.salesforce.com/id/00DXXXXXXXXXX/005XXXXXXXXXXXXXXX","token_type":"Bearer","issued_at":"1705988512338"}%
- この
instance_url
が間違いなくyourInstance
の値となります - ずっと
my.
をつけ忘れていて数時間彷徨った
{"error":"invalid_grant","error_description":"no client credentials user enabled"}
が発生したとき
- クライアントログインフローの実行ユーザが設定されていない.
- helpを参照して接続アプリケーションの実行ユーザを指定する
- 接続アプリケーション内の[ポリシーを編集]を押さないとこの設定箇所は見えないので注意.
5. あとはフローをゴニョゴニョ作成
- フロー設定についてはそこまで迷うことないので割愛します
- Salesforce APIのResponse Code一覧で処理を分けるのは必要
6. フローを使用するユーザに対しての権限セットを作成して割り当てする
6.1. プリンシパル設定
- 3-1.で作ったプリンシパルを、[外部ログイン情報プリンシパルアクセス]に追加しておく
6.2. オブジェクト設定
- [ユーザの外部ログイン情報]の参照権限を付与する
6.3. APIアクセス権限の付与
- システム権限の[APIの有効化]をONにする
7. おまけ: Postmanの設定
- Salesforce APIを試したい時は、まずPostmanの設定から入る方も多いのではないでしょうか。しかし、そこまでAPIAPIしていない生活だと、Postman開くたびに環境が変わると設定を忘れるので、メモしておきます
7-1. 接続アプリを作成する
- これは上記1.の接続アプリを同じ手順
7-2. Salesforce APIをForkするか、ForkしたCollectionsを選択
- ForkするURLなどはこちら
- [Authorization]タブを選択し、Type:
OAuth 2.0
を選択 - Callback URLはブラウザで認証にしておけばSalesforceのWebログイン画面で認証
-
{{url}}
はhttps://login.salesforce.com
-
{{clientid}}
は接続アプリケーションのコンシューマーキー- 上記は[Variables]に設定されている
- Scopeは
api
とする - [Get New Access Token]ボタンをクリック
- 認証に成功すると、Access Tokenが保存されるため、任意の名前をつけて保存
7-3. 対象のAPIのURIなどを設定、開く
- [Authorization]タブのTokenにて、先ほど作成したTokenを選択
- Bodyにパラメータを詰めて[Send]でいけるはず
参考情報
- とても助かりました