この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

ステップ 2: 認証を設定する

OAuth 2.0 を使用して、またはセッション ID を渡すことによって、認証を設定できます。

他のユーザのパスワードを処理している場合は、セッション ID は使用しないでください。

重要

OAuth 2.0 の設定

OAuth 2.0 の設定には、Salesforce 内と他の場所でのいくつかのステップを実行する必要があります。ステップに不明な点がある場合は、Salesforce ヘルプ「OAuth によるアプリケーションの認証」を参照してください。次の例では、Web サーバフローを使用します。

  1. まだ作成していない場合は、接続アプリケーションを作成します。Salesforce ヘルプ「接続アプリケーションの作成」を参照してください。
    [OAuth 設定の有効化] をクリックして、コールバック URL と OAuth 範囲を指定します。ここで指定する [コールバック URL] は、アプリケーションのコールバック URL と同じです。Java を使用する場合、通常はこれはサーブレットです。コールバック URL はセキュアである必要があります。http:// は機能せず、https:// のみが機能します。開発環境では、コールバック URL は https://localhost:8443/RestTest/oauth/_callback のような形になります。[保存] をクリックすると、[コンシューマ鍵] が作成されて表示され、[コンシューマの秘密] が作成されます (リンクをクリックして表示します)。

    OAuth 2.0 仕様では、「consumer (コンシューマ)」ではなく「client (クライアント)」という表現が使われます。Salesforce は OAuth 2.0 をサポートします。

    メモ

    Salesforce のリモートアクセスアプリケーションで使用される用語と、この手順の残りの部分にあるサンプルコードに含まれる値は次のように対応します。
    • client_id[コンシューマ鍵] に対応
    • client_secret[コンシューマの秘密] に対応
    • redirect_uri[コールバック URL] に対応。

    クライアントアプリケーションでは、ユーザを適切な OAuth エンドポイントにリダイレクトします。ユーザのログインが成功すると、Salesforce は認証コードでリダイレクト URI をコールします。次のステップでは、認証コードを使用してアクセストークンを取得します。認証コードの有効期限は 15 分です。

  2. Java またはその他のクライアントアプリケーションから、適切な Salesforce トークン要求エンドポイントに要求を行い、grant_typeclient_idclient_secret、および redirect_uri を渡します。redirect_uri は、Salesforce がコールバック送信する先の URI です。
    1initParams = { 
    2    @WebInitParam(name = "clientId", value = 
    3            "3MVG9lKcPoNINVBJSoQsNCD.HHDdbugPsNXwwyFbgb47KWa_PTv"),
    4    @WebInitParam(name = "clientSecret", value = "5678471853609579508"),
    5    @WebInitParam(name = "redirectUri", value = 
    6            "https://localhost:8443/RestTest/oauth/_callback"),
    7    @WebInitParam(name = "environment", value = 
    8            "https://login.salesforce.com/services/oauth2/token")  }
    9 
    10HttpClient httpclient = new HttpClient();
    11PostMethod post = new PostMethod(environment);
    12post.addParameter("code",code);
    13post.addParameter("grant_type","authorization_code");
    14
    15   /** For session ID instead of OAuth 2.0, use "grant_type", "password" **/
    16post.addParameter("client_id",clientId);
    17post.addParameter("client_secret",clientSecret);
    18post.addParameter("redirect_uri",redirectUri);
    19

    client_id (または consumer key) の値と client_secret (または consumer secret) が有効な場合、Salesforce はコールバックを、access_token. の値が含まれる redirect_uri に指定された URI に送信します。

  3. アクセストークンの値を Cookie として保存し、以降のすべての要求で使用します。次に例を示します。
    1//exception handling removed for brevity...
    2  //this is the post from step 2     
    3  httpclient.executeMethod(post);
    4     String responseBody = post.getResponseBodyAsString();
    5   
    6  String accessToken = null;
    7  JSONObject json = null;
    8   try {
    9       json = new JSONObject(responseBody);
    10         accessToken = json.getString("access_token");
    11         issuedAt = json.getString("issued_at");
    12         /** Use this to validate session 
    13          * instead of expiring on browser close.
    14          */
    15                                
    16         } catch (JSONException e) {
    17            e.printStackTrace();
    18         }
    19 
    20         HttpServletResponse httpResponse = (HttpServletResponse)response;
    21          Cookie session = new Cookie(ACCESS_TOKEN, accessToken);
    22         session.setMaxAge(-1); //cookie not persistent, destroyed on browser exit
    23         httpResponse.addCookie(session);

    このステップで、認証は完了です。

  4. 認証が完了したら、すべての要求で access_token 値をヘッダーに渡す必要があります。要求パラメータとして渡すことはできません。
    1HttpClient httpclient = new HttpClient();
    2   GetMethod gm = new GetMethod(serviceUrl);
    3    
    4   //set the token in the header
    5   gm.setRequestHeader("Authorization", "Bearer "+accessToken);
    6   //set the SOQL as a query param
    7   NameValuePair[] params = new NameValuePair[1];
    8       
    9   /**
    10    * other option instead of query string, pass just the fields you want back:
    11    *  https://instance_name.salesforce.com/services/data/v52.0/sobjects/Account/
    12    *       001D000000INjVe?fields=AccountNumber,BillingPostalCode
    13    */
    14   params[0] = new NameValuePair("q","SELECT name, title FROM Contact LIMIT 100");
    15   gm.setQueryString(params);
    16 
    17   httpclient.executeMethod(gm);
    18   String responseBody = gm.getResponseBodyAsString();
    19       //exception handling removed for brevity
    20   JSONObject json = new JSONObject(responseBody);
    21 
    22   JSONArray results = json.getJSONArray("records");
    23                    
    24   for(int i = 0; i < results.length(); i++)
    25       response.getWriter().write(results.getJSONObject(i).getString("Name")+     ",
    26         "+results.getJSONObject(i).getString("Title")+"\n");
REST 要求にアクセストークンを提供する構文は、次のとおりです。
1Authorization: Bearer access_token
次に例を示します。
1curl https://instance_name.salesforce.com/services/data/v52.0/ -H 'Authorization: Bearer access_token'

セッション ID の認証

他のユーザのパスワードを処理していない場合は、OAuth 2.0 アクセストークンの代わりにセッション ID を使用できます。
  1. セッション ID を取得します。たとえば、SOAP API login() コールは、セッション ID を返します。また、たとえば Apex の現在のコンテキストの一部として、セッション ID を持つこともできます。開発中にテスト目的のためだけにセッション ID が必要な場合、cURL コマンドで次のようにユーザ名パスワード OAuth フローを使用します。
    1curl https://login.salesforce.com/services/oauth2/token -d 'grant_type=password' -d 'client_id=myclientid' -d 'client_secret=myclientsecret' 
    2    -d 'username=mylogin@salesforce.com' -d 'password=mypassword123456'
    クライアント ID、クライアントの秘密、ユーザ名、およびユーザセキュリティトークンを付加したパスワードを入力する必要があります。
  2. リソースに要求を送信するときに、セッション ID を使用します。ID を token 値と置き換えます。構文は同じです。
    1Authorization: Bearer access_token

    次に例を示します。

    1curl https://instance_name.salesforce.com/services/data/v52.0/ -H 'Authorization: Bearer access_token'