みなさん、こんにちは。
今回はJWT認証を使用したMuleとSalesforceの接続を試してみました。
昨今、API連携を使用してのシステム実装が増えており、使用する機会が多くなりそうなので覚えておいて損はないと思います。
今回はMuleSoftからSalesforceへ接続する手順について紹介しますが、他の接続元でもベースは同じとなりますので是非ご活用ください。
必要なもの
JWTベアラー認証のために必要となるものです。【】内は今後設定で使用するためにラベル付けしていますので、設定する際に参考にしてください。
- 連携用Salesforceユーザ
- 【A-1】ユーザ名
- 証明書(crtファイル)
- 【B-1】一意の名前
- 【B-2】crtファイル
- キーストア
- 【C-1】jksファイル
- 【C-2】エクスポートパスワード
- 接続アプリケーション
- 【D-1】コンシューマ鍵
Salesforce側の設定
接続用ユーザの作成
Salesforce側で接続用のユーザを作成します。このユーザはMuleとの接続用に使用することになるため、最終的にはAPI連携用ユーザとなります。
Salesforceユーザを作成したら、ユーザ名を控えておきます。最終的にはSalesforceへログインしないユーザになるため、パスワードの控えまでは不要です。
今回はこちらの「Mule連携用ユーザ」を使用します。ユーザ名【A-1】を控えておくようにしましょう。
証明書の作成
本手順ではSalesforce証明書を使用します。既に他から証明書が発行済みであればこちらの手順は不要となります。
設定の[セキュリティ]→[証明書と鍵の管理]から「自己署名証明書作成」を選択します。
証明書の必要事項を入力します。
項目 | 設定値 | 備考 |
---|---|---|
表示ラベル | 任意名 | |
一意の名前 | 任意名 | 表示ラベルから入力不可文字(スペースなど)を除いてコピーされる 証明書のファイル名として使用される |
鍵サイズ | どちらを選択しても可能 | 鍵サイズが大きい方が安全性が高いものの、負荷が大きくなる |
エクスポート可能な非公開鍵 | チェック |
作成後、証明書のダウンロードボタンから証明書をダウンロードします。端末にcrtファイルがダウンロードされます。「一意の名前」(【B-1】)は後のMule側の接続設定で入力することになるため、控えておきましょう。
ダウンロードされたcrtファイルは「{一意の名前}.crt」ファイル【B-2】となり、後述の接続アプリケーション設定に使用します。
接続アプリケーション設定
続いて接続アプリケーションを設定していきます。接続アプリケーションでは認証機関から発行された証明書(crtファイル【B-2】)を使用します。Salesforce以外から証明書を発行している場合は、crtファイルを準備してください。
アプリケーションマネージャから接続アプリケーションを作成します。設定項目はたくさんありますが、今回の設定に必要な項目は以下の通りです。
項目 | 設定値 | 備考 |
---|---|---|
OAuth設定の有効化 | チェック | |
デジタル署名を使用 | チェック | |
ファイルを選択 | 証明書(crtファイル)【B-2】をアップロード | |
許可されているユーザ | 管理者が承認したユーザは事前承認済み | Manage→ポリシー編集から設定 |
メールやコールバックURLなどの必須項目もありますが、今回の認証には関係ないため任意の値を入力して問題ありません。今回は「Mule」という名前で接続アプリケーションを作成することにします。
接続アプリケーションを作成したら、「コンシューマの詳細を管理」ボタンからコンシューマ鍵【D-1】とコンシューマの秘密を表示します。コンシューマ鍵【D-1】は後述するMule側の接続設定に使用しますので控えておきましょう。コンシューマの秘密は不要です。
キーストア生成
本手順ではキーストアについてもSalesforce環境から作成します。別手順でキーストアを作成するのであれば、こちらの手順は不要です。
再び設定の[セキュリティ]→[証明書と鍵の管理]からキーストアにエクスポートを選択します。
キーストアのパスワードを入力し、エクスポートします。エクスポートされたjksファイル【C-1】とパスワード【C-2】は後ほどMule側の設定に使用しますので控えておいてください。
Salesforceからキーストアをエクスポートした場合は、{組織ID}.jksというファイル名でダウンロードされます。
また、キーストアのエクスポートはSalesforce組織に対して実施されますので、複数の証明書を作成している場合は1つのキーストアに対し、複数の証明書が紐づくことになります。複数の証明書から一意の証明書を特定するために証明書で設定した一意の名前【B-1】が使用されますのでそちらも控えておきましょう。
権限セットの作成
権限セットの作成は必須という訳ではありませんが、権限設定を一元化するために作成することを推奨します。JWT認証用の権限セットを作成し、以下の権限を付与します。
今回は「MuleUser」という名前の権限セットを作成します。ライセンスを「Salesforce」で選択して作成します。
権限セット作成後、システム権限から以下の権限を付与します。API連携用の権限セットとなるため、Salesforceに直接ログインせずに、パスワード変更やMFA認証をパスするように以下の権限を付与してください。
- API 限定ユーザ
- パスワード無期限
- 除外ユーザの多要素認証を放棄
続いて、接続アプリケーションを割り当てます。割り当てられた接続アプリケーションから前述で作成した接続アプリケーション(Mule)を割り当てます。
最後に権限セットにユーザを割り当てます。割り当ての管理から連携用Salesforceユーザを割り当ててください。
Salesforce側の設定は以上となります。
MuleSoft側の設定
以上でSalesforce側に連携するための材料を揃えましたので、次はMule側での接続設定となります。
Mule側はConnector configurationに接続情報を設定していきます。プロパティファイルとGlobal Elementsで情報を一元化すると楽です。
項目 | 設定値 | 備考 |
---|---|---|
Name | 任意名 | 特にこだわりがなければデフォルトのSalesforce_ConfigでOK |
Connection | OAuth JWT | |
Consumer key | 接続アプリケーションのコンシューマ鍵【D-1】 | |
Key store | エクスポートしたキーストア【C-1】 | エクスポートしたキーストアファイル(jksファイル)を添付 |
Store password | キーストアのエクスポートパスワード【C-2】 | |
Certificate alias | 証明書の一意の名前【B-1】 | 証明書とエントリ数が1対1であれば不要 キーストアは小文字として処理されるので、大文字込みで入力した場合は変換すること 例)Salesforce_Certificate_for_Mule→salesforce_certificate_for_mule |
Principal | SalesforceのユーザID【A-1】 | Mule連携用ユーザのユーザID |
Token endpoint | https://login.salesforce.com/services/oauth2/token | Sandboxの場合はloginをtestに置き換え |
Audience url | (未設定) |
一通り設定が完了したら、Test Connectionで接続を確認してみましょう。「Test Connection successful」が出れば成功です。
これでパスワードなしで接続アプリケーション経由でSalesforceへと接続することができました。あとはSalesforceの各コネクタに対し、Connector configurationを上記のSalesforce configに設定すればOKです。
最後に
以上がJWTベアラーフローを使用したMuleとSalesforceの接続設定の流れとなります。なかなか設定周りが難しく試行錯誤するかもしれませんが、接続できた時は喜びもひとしおです。セキュリティ的にもユーザ名とパスワードによるBasic認証よりも安全性が高い手法となっていますので、設定に慣れておきましょう。