Salesforce から Cloud Workflows を呼び出してみた②

記事タイトルとURLをコピーする

はじめに

こんにちは、PE課(プロセスエンジニアリング課)の江利です。

前回の記事ではサービスアカウントを使った認証の設定方法を紹介しましたが、今回は指定ユーザーでの認証の設定方法を紹介したいと思います。

対象読者

  • Salesforce(Apex) から 指定ログイン情報を使った認証で Cloud Workflows を呼び出したい方

Google Cloud 側の操作

OAuth クライアント ID を作成

アプリケーションの種類はウェブアプリケーションを選択してください。

任意の名前を入力し、承認済みの JavaScript 生成元、承認済みのリダイレクト URI は特に追加せずに作成ボタンをクリックします。(作成されるまでに少し時間がかかる場合があります)

新規 OAuth クライアント ID を作成

Salesforce 側の操作

認証プロバイダーを作成

ご自身の Salesforce ユーザーの権限に認証プロバイダーの管理がない場合は権限セットなどで付与してください。

以下の内容で認証プロバイダーを作成します。

  • プロバイダータイプ:Open ID Connect
  • 名前:任意
  • URL 接尾辞:任意(名前と同じ)
  • コンシューマー鍵:先ほど作成した GCP OAuth 2.0 クライアント ID の「クライアント ID」
  • コンシューマーの秘密:同じく先ほど作成した GCP OAuth 2.0 クライアント ID の「クライアント シークレット」
  • 承認エンドポイント URL:https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force
  • トークンエンドポイント URL:https://oauth2.googleapis.com/token
  • Proof Key for Code Exchange (PKCE) 拡張を使用:チェックオン
  • デフォルトの範囲:https://www.googleapis.com/auth/cloud-platform
  • ヘッダーでアクセストークンを送信:チェックオン
  • SOAP API 応答にコンシューマーの秘密を含める:チェックオン

認証プロバイダーの設定内容

Google Cloud 側の操作②

認証済みのリダイレクト URI を設定

先ほど作成した GCP OAuth 2.0 クライアント ID の「承認済みのリダイレクト URI」に、作成した認証プロバイダーの「コールバック URL」を登録します。

認証済みのリダイレクト URI

コールバック URL

Salesforce 側の操作②

リモートサイトの設定を追加

以下の内容で新規リモートサイトを作成します。

  • リモートサイト名:任意
  • リモートサイトの URL :https://workflowexecutions.googleapis.comを追加します。

指定ログイン情報を作成

「新規(従来)」より以下の内容で指定ログイン情報を作成します。

  • 表示ラベル:任意
  • 名前:任意
  • URL:https://workflowexecutions.googleapis.com/v1
  • ID 種別:指定ユーザー
  • 認証プロトコル:OAuth 2.0
  • 認証プロバイダー:先ほど作成した認証プロバイダーを指定
  • 範囲:https://www.googleapis.com/auth/cloud-platform
  • 認証ヘッダーを生成:チェックオン
  • HTTP ヘッダーの差し込み項目を許可:チェックオン
  • HTTP 本文の差し込み項目を許可:チェックオン

Apexクラスのサンプルコード

HttpRequest req = new HttpRequest();
req.setEndpoint('callout:[指定ログイン情報のAPI名]'+[エンドポイントの URL(指定ログイン情報で指定した URL 以降)]);
req.setMethod('POST');
req.setHeader('content-type', 'application/json');
JSONGenerator gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeStringField('param1', 'hoge');
gen.writeStringField('param2', 'fuga');
gen.writeStringField('param3', 'fuga');
gen.writeEndObject();
String jsonS = gen.getAsString();
gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeStringField('argument', jsonS);
gen.writeEndObject();
jsonS = gen.getAsString();
System.debug(jsonS);
req.setBody(jsonS);
Http http = new Http();
HTTPResponse res = http.send(req);
System.debug(res.getBody());

前回の記事でも触れましたが Cloud Workflows にコールアウトする際にポイントとなるのがgen.writeStringField('argument', jsonS);の部分となりますのでご注意ください。

※各クラスの詳細は以下の公式ドキュメントを参照ください。

HttpRequest クラス

JSONGenerator クラス

認証方法が異なるだけで、最終的に渡しているリクエストボディ自体は同じなので実行結果は前回と同じです。

まとめ

さて、今回は Salesforce で Apex から認証プロバイダーを使った認証で Cloud Workflows を呼び出してみました。この記事がどなたかの助けとなれば幸いです。

Cloud Workflows についての詳しい解説は G-gen のこちらの記事に詳しい記載があります。

blog.g-gen.co.jp

江利 義陽(記事一覧)

CE部PE課でSalesforceエンジニアをやっています。Salesforce歴は14年くらいなのでチョットだけわかります。
記事への質問やフィードバックは yoshiaki.eri@serverworks.co.jp までお願いいたします。
Trailblazer プロファイル