概要
Azure Data Factory の web アクティビティにて Salesforce の REST API を利用する際のアクセストークンを取得する方法を共有します。現時点で実装検証が完了している下記の方法におけるアクセストークンの取得方法と無効化の方法を紹介します。
OAuth 2.0 ユーザー名パスワードフローについては Salesforce のドキュメントにて下記のように記述されているため、OAuth 2.0 クライアントログイン情報フロー(あるいは、OAuth 2.0 Web サーバーフロー)を利用することが推奨されています。
重要 セキュリティを強化するために、ユーザー名パスワードフローの代わりに、コード交換の証明鍵 (PKCE) を使用する OAuth 2.0 Web サーバーフロー、または OAuth 2.0 クライアントログイン情報フローを使用することをお勧めします。
引用元:特別なシナリオの OAuth 2.0 ユーザー名パスワードフロー (salesforce.com)
この記事では、インテグレーションユーザーと接続アプリを作成していることを前提としています。
手順
1. OAuth 2.0 クライアントログイン情報フローによる方法
1-1. アクセストークンの取得
下記の設定をした web アクティビティを追加します。OAuth 2.0 ユーザー名パスワードフローによる方法とは、 URL が異なることに注意してください。
# | 項目 | 値 |
---|---|---|
1 | URL | https://{DomainName}.my.salesforce.com/services/oauth2/token |
2 | メソッド | POST |
3 | 本文 | grant_type=client_credentials&client_id={ClientId}&client_secret={ClientSecret} |
4 | ヘッダー | Content-Type: application/x-www-form-urlencoded |
1-2. アクセストークンの無効化
下記の設定をした web アクティビティを追加します。
# | 項目 | 値 |
---|---|---|
1 | URL | https://{DomainName}.my.salesforce.com/services/oauth2/revoke |
2 | メソッド | POST |
3 | 本文 | token={AccessToken} |
4 | ヘッダー | Content-Type: application/x-www-form-urlencoded |
アクセストークンは、下記のような式により前の手順で設定した Web アクティビティの出力結果をセットします。
@concat(
'token=',
activity('GetToken').output.access_token
)
1-3. 動作確認
デバック実行を行い、アクセストークン等を取得していることを確認してください。
OAuth 2.0 ユーザー名パスワードフローによる方法
2-1. アクセストークンの取得方法
下記の設定をした web アクティビティを追加します。
# | 項目 | 値 |
---|---|---|
1 | URL | https://login.salesforce.com/services/oauth2/token |
2 | メソッド | POST |
3 | 本文 | grant_type=password&client_id={ClientId}&client_secret={ClientSecret}&username={UserName}&password={Password}{SecurityToken} |
4 | ヘッダー | Content-Type: application/x-www-form-urlencoded |
2-2. アクセストークンの無効化
# | 項目 | 値 |
---|---|---|
1 | URL | https://login.salesforce.com/services/oauth2/revoke |
2 | メソッド | POST |
3 | 本文 | token={AccessToken} |
4 | ヘッダー | Content-Type: application/x-www-form-urlencoded |
アクセストークンは、下記のような式により前の手順で設定した Web アクティビティの出力結果をセットします。
@concat(
'token=',
activity('GetToken').output.access_token
)
2-3. 動作確認
デバック実行を行い、アクセストークン等を取得していることを確認してください。
本場利用に向けたパイプラインの改善
OAuth 2.0 クライアントログイン情報フローによる方法の改善
1. Client ID と Client Secret を Key Vault に格納
@concat(
'grant_type=client_credentials',
'&client_id=',
activity('GetSFDCClientId').output.Value,
'&client_secret=',
activity('GetSFDCClientSecret').output.Value
)