CData Software Blog

クラウド連携のCData Software の技術ブログです。

Salesforce REST API にOAuth2.0認証フローでPostmanからアクセスする方法

はじめに

SalesforceREST APIへのアクセスではOAuth2.0認証フローを利用できます。本記事では、SalesfofceのOAuth2.0認証フローでよく利用されている、クイックにAPIアクセスが確認ができる「ユーザー名・パスワードフロー」、および、外部のWebアプリケーションからの利用で使われる「Web サーバフロー」の2つの認証フローでPostmanからSalesforce REST APIにアクセスする方法をご紹介します。

f:id:kuwazzy:20210218195855p:plain

手順

OAuth設定の有効化

まずはじめに、SalesforceOAuth認証を利用できるようにするにはOAuth 設定の有効化が必要となります。本手順がお済でない方は、下記記事をご参照ください。

www.cdatablog.jp

アクセストークンの取得

Salesforceの各種APIにアクセスするには、アクセストークンの取得が必要となります。本手順では、SalesforceのOAuth2.0認証フローである「ユーザー名・パスワードフロー」、および、「Web サーバフロー」の2つをご紹介します。

ユーザ名・パスワードフロー

1つ目にご紹介する方法は「ユーザ名・パスワードフロー」でのアクセストークンの取得方法です。この方法では、Postmanに以下の項目をセットします。Bodyの「grant_type : password」が「ユーザ名パスワードフロー」であることを示します。

f:id:kuwazzy:20210218164623p:plain

  • メソッド:POST
  • URL:https://login.salesforce.com/services/oauth2/token
  • Body(form-data) :
    • grant_type : password
    • client_id : OAuth設定の有効化手順で取得した「コンシューマ鍵」
    • client_secret : OAuth設定の有効化手順で取得した「コンシューマの秘密」
    • username : Salesforceユーザ名
    • password : Salesforceユーザのパスワードにセキュリティトークンを付与(例えば、パスワード:password123、セキュリティトークン:token123の場合は、password123token123となります)

上記設定でAPIをリクエストして正常であればレスポンスBodyに以下のようなアクセストークンを含むJSON文字列を取得できます。

{
    "access_token": "00D7F000003gtxz!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.Gy2A",
    "instance_url": "https://ap5.salesforce.com",
    "id": "https://login.salesforce.com/id/00D7F000003gtxzUAA/0057F000002AtVTQA0",
    "token_type": "Bearer",
    "issued_at": "1613633893849",
    "signature": "QMf/j90j+xxxxxxxxxxxxxSp4SA3sOo1iO0="
}

※一部マスキングしています。

(ご参考) SALESFORCE ヘルプ > ドキュメント > ユーザの識別およびアクセス権の管理 > 特別なシナリオの OAuth 2.0 ユーザ名パスワードフロー

Web サーバフロー

次にご紹介するのが「Web サーバフロー」でのアクセストークンの取得方法です。この方法では、まず、Webブラウザから以下のURLにアクセスします。

https://ap7.salesforce.com/services/oauth2/authorize?response_type=code&client_id=XXXXX&redirect_uri=https://localhost:33333
  • client_id : OAuth設定の有効化手順で取得した「コンシューマ鍵」
  • redirect_uri : OAuth設定の有効化手順で設定したコールバックURL。本例では、https://localhost:33333

Salesforceのログイン画面が表示されるので、ユーザ名、および、パスワードをセットしてログインします。

f:id:kuwazzy:20210218193138p:plain

ログインが成功すると、OAuth 設定の有効化手順で作成したアプリを使用して許可するかの確認画面が表示されます。

f:id:kuwazzy:20210218193249p:plain

許可するとコールバックURL(redirect_uri)で指定してアドレスにリダイレクトされます。本例では「https://localhost:33333」と設定して該当のWebアプリケーションがないので「このサイトにアクセスできません」と表示されてますが、URLを見ると「code=」以降に許可コードが表示されていることを確認できます。

f:id:kuwazzy:20210218193336p:plain

上記で取得した許可コードを手元に控えてPostmanで別なタブを開き、以下の項目をセットします。

f:id:kuwazzy:20210218193954p:plain

  • メソッド:POST
  • URL:https://login.salesforce.com/services/oauth2/token
  • Body(x-www-form-urlencoded) :
    • grant_type : authorization_code
    • code : 上記手順で取得した許可コード(※コード内の「%3D」はURLエンコードされているので「=」に変換する必要あり)
    • client_id : OAuth設定の有効化手順で取得した「コンシューマ鍵」
    • client_secret : OAuth設定の有効化手順で取得した「コンシューマの秘密」
    • client_secret : OAuth設定の有効化手順で取得した「コンシューマの秘密」
    • redirect_uri : OAuth設定の有効化手順で設定したコールバックURL

上記設定でAPIをリクエストして問題がなければ、レスポンスBodyには以下のようなアクセストークンを含むJSON文字列を取得することができます。また、本「Web サーバフロー」でアクセストークンを取得した場合には、リフレッシュトークン(refresh_token)と呼ばれるアクセストークンの有効期限が切れた場合、新しいアクセストークンを取得するためのトークンも取得できます。

{
    "access_token": "00D7F000003gtxz!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdyM_u_gU_Z0UrsbJITSkOKOvng52oHl8e",
    "refresh_token": "5Aep8613hy0tHCYdhxNZnXXXXXXXXXXXXXXXXXXXXXXXXXXXXxPAuoXdnO.wNBZGQ5o",
    "signature": "DpNv9vv9oioFhJfIjopXXXXXXXOsUWpxKIgjN66OAM=",
    "scope": "refresh_token id api",
    "instance_url": "https://ap5.salesforce.com",
    "id": "https://login.salesforce.com/id/00D7F0XXXXXXgtxzUAA/0057F0XXXAtVXQA0",
    "token_type": "Bearer",
    "issued_at": "1613644705664"
}

※一部マスキングしています。

(ご参考) SALESFORCE ヘルプ > ドキュメント > ユーザの識別およびアクセス権の管理 > Web アプリケーションインテグレーションの OAuth 2.0 Web サーバフロー

オブジェクト一覧の取得

以降のAPIアクセスでは上記手順で取得したアクセストークンを利用します。まずは、Salesforceのデータが格納されているオブジェクトの一覧を取得してみましょう。Postmanで別なタブを開き、以下の項目をセットします。

f:id:kuwazzy:20210218165837p:plain

上記設定でAPIをリクエストして問題がなければ、レスポンスBodyにはsObjectというSalesforceのデータが格納されているオブジェクトの一覧を取得できます。

{
    "encoding": "UTF-8",
    "maxBatchSize": 200,
    "sobjects": [
        {
            "activateable": false,
            "associateEntityType": null,
            "associateParentEntity": null,
            "createable": false,
            "custom": false,
            "customSetting": false,
            "deepCloneable": false,
            "deletable": false,
            "deprecatedAndHidden": false,
            "feedEnabled": false,
            "hasSubtypes": false,
            "isInterface": false,
            "isSubtype": false,
            "keyPrefix": "9qd",
            "label": "AI インサイトアクション",
            "labelPlural": "AI インサイトアクション",
            "layoutable": false,
            "mergeable": false,
            "mruEnabled": false,
            "name": "AIInsightAction",
            "queryable": true,
            "replicateable": true,
            "retrieveable": true,
            "searchable": false,
            "triggerable": false,
            "undeletable": false,
            "updateable": false,
            "urls": {
                "rowTemplate": "/services/data/v50.0/sobjects/AIInsightAction/{ID}",
                "defaultValues": "/services/data/v50.0/sobjects/AIInsightAction/defaultValues?recordTypeId&fields",
                "describe": "/services/data/v50.0/sobjects/AIInsightAction/describe",
                "sobject": "/services/data/v50.0/sobjects/AIInsightAction"
            }
        }

※大部分を省略しています。

取引先(Account)のデータを取得

次に、SOQLというSalesforceデータへアクセスできるクエリ言語を使って取引先(Account)のデータにアクセスしてみます。Postmanで別なタブを開き、以下の項目をセットします。

f:id:kuwazzy:20210218171050p:plain

URL内の「SELECT+Name+FROM+Account」がSOQLクエリ言語になります。スペースがプラス(+)に置き換わっているだけで、RDBMSでよく使われているSQLに構文が似ています。上記設定でAPIをリクエストするとレスポンスBodyには取引先(Account)の取引先名(Name)が一覧で取得できます。

{
    "totalSize": 1060,
    "done": true,
    "records": [
        {
            "attributes": {
                "type": "Account",
                "url": "/services/data/v50.0/sobjects/Account/0017F00000NMZ1XQAX"
            },
            "Name": "Thornton502 Inc"
        },
        {
            "attributes": {
                "type": "Account",
                "url": "/services/data/v50.0/sobjects/Account/0017F00000NMZ1YQAX"
            },
            "Name": "Fitzgerald503 Inc"
        }
    ]
}

※大部分を省略しています。

まとめ

本記事では、Postmanを利用してSalesfofceのOAuth2.0認証フローでアクセストークンを取得、そして、取得したアクセストークンを利用してREST APIでオブジェクト一覧やオブジェクト内のデータにアクセスする方法をご紹介しました。是非、SalesforceREST APIをまずは使ってみたい、という方はお試しください。CData Software では、OAuth2.0の認証フローでSalesforce のデータにあらゆるBI、アナリティクス、帳票、ETL およびカスタムアプリケーションからデータ連携可能な製品を提供しています。30日間の無償評価版もありますので是非お試しください。

www.cdata.com