はじめに
こんにちは、PE課(プロセスエンジニアリング課)の江利です。
前回の記事ではサービスアカウントを使った認証の設定方法を紹介しましたが、今回は指定ユーザーでの認証の設定方法を紹介したいと思います。
対象読者
- Salesforce(Apex) から 指定ログイン情報を使った認証で Cloud Workflows を呼び出したい方
Google Cloud 側の操作
OAuth クライアント ID を作成
アプリケーションの種類はウェブアプリケーション
を選択してください。
任意の名前を入力し、承認済みの JavaScript 生成元、承認済みのリダイレクト URI は特に追加せずに作成ボタンをクリックします。(作成されるまでに少し時間がかかる場合があります)

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」を登録します。


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);
の部分となりますのでご注意ください。
※各クラスの詳細は以下の公式ドキュメントを参照ください。
認証方法が異なるだけで、最終的に渡しているリクエストボディ自体は同じなので実行結果は前回と同じです。
まとめ
さて、今回は Salesforce で Apex から認証プロバイダーを使った認証で Cloud Workflows を呼び出してみました。この記事がどなたかの助けとなれば幸いです。
Cloud Workflows についての詳しい解説は G-gen のこちらの記事に詳しい記載があります。
江利 義陽(記事一覧)
CE部PE課でSalesforceエンジニアをやっています。Salesforce歴は14年くらいなのでチョットだけわかります。
記事への質問やフィードバックは yoshiaki.eri@serverworks.co.jp までお願いいたします。
Trailblazer プロファイル