当ブログではアフィリエイト広告を利用しています

Tips集 製品・サービス

Talend API TesterのREST APIを使ってSalesforceにOAuthクライアント認証を行う

外部システムとSalesforceのデータ連携方法のひとつとして、Salesforceが提供する標準APIを利用した方法があります。

本記事では、Gooole Chromeの拡張機能として提供されているTalendのAPI Testerを利用して、SalesforceにOAuthクライアント認証する手順を説明します。

REST APIテストのためのツールは、代表的なものとして、「swagger」や「Postman」などいくつかありますが、「Talend API Test」は、Chromeの拡張で簡単に利用できる以外にも以下のような利点があります。

ポイント

  • Chrome 拡張機能として、簡単に利用可能
  • 環境変数をグローバルで保存可能
  • APIコールの設定情報(Endpointやクエリパラメータなど)を保存し、再利用が可能。※JSON化して保存することも可能

はじめに

今回は、Salesforceの接続アプリケーションの機能を利用して、外部システムからAPI接続する方法をご紹介します。

接続アプリケーションを使用して、外部システム(アプリケーション)からSalesforce に統合するには、OAuth API(OAuth 2.0) を使用する必要があります。

※OAuth 2.0 は、トークンの交換を通してアプリケーション間の安全なデータ共有を認証するオープンプロトコルです。

以下の流れに沿って作業をしていく必要があります。

簡単な流れ

  1. Salesforce組織で外部接続用のユーザを用意
  2. 接続アプリケーションの設定
  3. セキュリティトークンの発行
  4. 外部システム側でのREST API接続設定

1.Salesforce組織で外部接続用のユーザを用意

外部システムからSalesforceにOAuth2.0を使ってクライアント認証をするためのユーザアカウントを用意します。

※既に作成されているユーザがある場合は、そちらを利用することも可能です。

ユーザアカウントを用意したら、ユーザが利用しているプロファイルに対して、「APIの有効化」のシステム管理者権限を付与します。

システム管理者権限:「APIの有効化」をONにして保存

2.接続アプリケーションの設定

Salesforceに外部システムからOAuth認証するには、接続アプリケーションの作成を行う必要があります。

手順①Salesforceにシステム管理者でログインして、設定->アプリケーションマネージャを実行し、新規接続アプリケーションのボタンをクリックします。

手順②新規接続アプリケーションの作成画面で以下、必用な情報を登録していきます。

以下、入力例

接続アプリケーション名:Talend API Tester

API参照名:Talend_API_Tester

取引先責任者メール:cclt@mail.com

手順③上記必須項目を入力後、API(OAuth設定の有効化)のチェックをONにすると以下の入力画面が表示されます。

以下、必須項目の内容を設定します。

コールバックURL:https://login.salesforce.com/services/oauth2/token

※接続先がSandboxの場合は、以下のURLとなります。

「https://test.salesforce.com/services/oauth2/token」

選択したOAuth範囲:以下を選択

・APIを使用してユーザデータを管理(api): REST API や Bulk API 2.0 などの API を使用して、現在のログインユーザのアカウントへのアクセスを許可します。この範囲には、Connect REST API リソースへのアクセスを許可する chatter_api も含まれます。

・いつでも要求を実行(refresh_token,offline_access):更新トークンを受け取る資格が要求元クライアントにある場合に、更新トークンを返すことを許可します。更新トークンにより、ユーザがオフラインのときにアプリケーションはユーザのデータを操作できます。このトークンは、offline_access を要求した場合と同じ意味になります。

OAuthの範囲の設定内容については、以下Salesforce公式サイトで確認ができます。

Salesforce公式HELPサイト[OAuth トークンおよび範囲]

手順④上記設定完了後保存すると以下の確認画面が表示されます。こちらの画面では「次へ」をクリックします。

手順⑤設定後は、以下の画面でAPI(OAuth設定の有効化)のセクションにコンシューマキーと秘密の項目に、「コンシューマの詳細を管理」ボタンが表示されるので、クリックします。

手順⑥「コンシューマの詳細を管理」をクリックすると以下の画面が表示されます。(IDを検証)

手順⑦以下のメールが送信されるため、確認コードをコピーして、先ほどのID検証画面で確認コードをペーストして検証を実行します。

手順⑧以下の画面が表示されたらコンシューマ鍵とコンシューマの秘密の2つをコピーし、テキストエディタなどに保存しておきます。

※外部システムからREST APIでアクセスする際に利用します。

コンシューマ鍵を新規で作成する場合は、生成ボタンをクリックすると新規のコンシューマキーが生成されます。

ステージングされたコンシューマキーを適用すると以下のメッセージが表示されます。

新規コンシューマキーを生成して、適用した直後に外部システムからAPIでアクセスすると以下のようなエラーとなります。

error code : 400 Bad Request

error : "invalid_client_id"

上記エラーの場合は、数分程度待ってから実行して正常に接続できるか確認してください。

3.セキュリティトークンの発行

続いては、セキュリティトークンの発行手順となります。

外部システムからREST APIでOAuth接続する場合、利用するユーザに対してセキュリティトークンを発行して、ログインパスワード+セキュリティトークンの組み合わせでパスワードのパラメータを指定する必要があります。

セキュリティトークンを発行せずOAuth認証した場合、以下のエラーが発生します。

error code : 400 Bad Request

error :  "invalid_grant"

error_description : "authentication failure"

手順①外部システムからOAuth認証で利用するユーザアカウントを使ってSalesforceにログインします。

手順②ログイン後、私の設定:個人設定画面で、「私のセキュリティトークンのリセット」メニューから「セキュリティトークンのリセット」を実行します。

手順③以下、リセットメール送信後、リセットされたセキュリティトークンの情報をメールで受信します。

メール本文のセキュリティトークン(大文字と小文字を区別)の値は、外部システムからREST APIを使ってアクセスする際に利用します。

4.外部システム側でのREST API接続設定

最後に、Talend API TesterのREST APIで、Salesforceに対してOAuthのクライアント認証を行う手順を説明します。

Talend API Tester インストール

まずは、Chromeの拡張機能「Talend API Tester」インストールしていきます。

手順①ブラウザChromeを起動して、以下のURLを入力するか、Chromeウェブストアを表示して、「Talend API Test」で検索します。

Talend API Testerが表示されたらクリックして詳細画面を表示します。

https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm

手順②詳細画面で、Chormeに追加ボタンをクリックしてインストールします。

手順③Chromeにインストールが完了したら、アイコンをクリックしてTalend API Testerを起動します。

すると以下の画面が表示されるため、Use Talend API Tester - Free Editionをクリックして開始します。

以上で、インストールは完了となります。

Talend API TesterでSalesforceへOAuth認証

ここからは、Talend API Testerを使って、Salesforceにログイン認証する手順を説明していきます。

手順①新規プロジェクトの作成:Talend API Testerの画面を表示したら、Requestsのタブ->「REPOSITORY」を開いて、MY DRYBEの「:」メニューをクリックして、[Add a project]を実行します。

手順②プロジェクト作成画面で、プロジェクト名を設定して+Createをクリックします。

プロジェクト名:(例)Salesforce REST API ※任意の名称

Also create a scenario:シナリオは今回は利用しないため、チェックはOFFにしてもよいです。

手順③プロジェクトが作成されます。※Scenarioにチェックを入れている場合は、Scnarioも作成されています。

今度は、プロジェクト名(Salesforce REST API)の「:」メニューをクリックして、「Add a service」を実行します。

手順④サービスの追加画面が表示されたらデフォルトのサービス名「Service」を修正しておきます。

サービス名:(例)Salesforce

手順⑤サービス名を変更したら、+Add a requestをクリックして、リクエストを作成します。

デフォルトのリクエスト名(Request)を実行するRequestの処理名に変更します。

リクエスト名:ログイン認証リクエスト

手順⑥続いて、Open requestのボタンをクリックします。

手順⑦Request画面を表示するとデフォルトでは以下のような画面となっています。

手順⑧今回はSalesforceのOAuth認証をしてトークンを取得するリクエストを作成します。

以下の内容で設定を行います。

METHOD(メソッド):POST

SCHEME:https://login.salesforce.com/services/oauth2/token

※SalesforceのOAuthトークンエンドポイントを指定します。接続先がSandboxの場合は、以下のURLとなります。

「https://test.salesforce.com/services/oauth2/token」

【HEADERS】

Content-Type:application/x-www-form-urlencoded

【BODY】

パラメータの設定方法は、今回はFORM形式で以下をそれぞれ指定します。

  • grant_type:TEXT=:password
  • client_id:TEXT=:接続アプリケーションで発行したコンシューマ鍵(例)3MVG95mg0lk4batiP7Q5f8gZVREE.2FpJFS...
  • client_secret:TEXT=:接続アプリケーションで発行したコンシューマ秘密鍵(例)E92AA80B028EC9D0A49AE2BEB296...
  • username:TEXT=:Salesforceユーザアカウント(例)cclt-integration-user@mail.com
  • password:TEXT=:ユーザのパスワードセキュリティトークン(例)userPasswordwMlVs4R6nsv9L9drIIuR

手順⑨上記Requestを設定したら、Sendボタンをクリックしてリクエストを実行してみましょう。

実行結果として、以下のようにResponseで200OKが表示されれば成功となります。

上記レスポンスBODYの「access_token」と「instance_url」を利用して、Salesforceのデータへアクセスすることができるようになります。

アクセストークンを利用してSOQLクエリを実行

今度は、OAuth認証を実行して取得したアクセストークンとインスタンスURLを使って、SOQLクエリを実行してみましょう。

手順①プロジェクト「Salesforce REST API 」のサービス「Salefsorce」以下の新規REQUESTを追加します。

Request名:(例)取引先責任者の名前を取得するクエリを実行

METHOD:GET

SCHEMA:取得したinstance_url//services/data/v50.0/query/?q=クエリ文

(例)https://cclt-dev-ed.my.salesforce.com/services/data/v50.0/query/?q=SELECT+FirstName+FROM+Contact

※取引先責任者(Contact)に対して、Firstname(名)を取得するSELECT文(SPの部分は+に置き換えが必要です)

HEADERS

Authorization:Bearer 00D5h000004bsqk!AQwAQB_PXWbdAQCP_SlAXxFdfhWwEOW....

※Bearer+半角SP+access_token

手順②上記を設定後、クエリのパラメータの横にある「:」をクリックしてEncodeにチェックがされていないことを確認して[Send]を実行します。

以下のようにResponse200OKが返却され、BODYに取得した取引先責任者の名前の情報が表示されます。

クエリパラメータがEncodeされている場合には、MALFOMED_QUERYのエラーが発生するので注意してください。

(補足)Salesforce組織でIPアドレス制限を実施している場合

IPアドレス制限を実施している場合、外部システム側が固定のグローバルIPアドレスがある場合は、IPアドレスをホワイトリストへ登録します。

固定のグローバルIPがない場合は、接続アプリケーションの設定で、IPアドレス制限の緩和をすることで接続が可能となります。

IPアドレス制限の緩和をすると、セキュリティが低下するため、更新トークンのポリシーを厳格化するなどの考慮が必要です。

まとめ

今回は、Talend API Testerを使ったOAuthクライアント認証の手順を説明しましたが、他のツールやシステムからSalesforceにREST APIでアクセスする際も同様の設定手順となるため、手順を参考に設定をしてみてください。

チロ
ブログランキングに参加しましたので、ご支援していただけると幸いです。

にほんブログ村 IT技術ブログへ
にほんブログ村

-Tips集, 製品・サービス
-, , , , , ,