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

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

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

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

重要

認証用の OAuth コンシューマ ID の取得を希望するパートナー様は Salesforce まで連絡してください。

OAuth 2.0 の設定

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

  1. まだ新しい接続アプリケーションを作成していない場合は、Salesforce で、[設定] から [作成] | [アプリケーション] をクリックし、[接続アプリケーション][新規] をクリックして作成します。ここで指定する [コールバック URL] は、Web アプリケーションのコールバック 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] に対応

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

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

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

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

    これで、認証は完了です。

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