2012-02-13 25 views
16

Estoy examinando una muestra que se encuentra en el sitio del desarrollador de Salesforce.API Salesforce REST ¿Iniciar sesión?

En ese ejemplo, cuando hacemos clic en un enlace, se lo redirecciona a la página de inicio de sesión de Salesforce. Si el inicio de sesión es exitoso, se emite un token de acceso.

No quiero que mi aplicación redirija a la página de inicio de sesión de salesforce. En la muestra existente de la variable de entorno se establece en,

"https://login.salesforce.com"

¿Qué debo hacer para evitar volver a dirigir a la página de inicio de sesión de fuerza de ventas.

Respuesta

13

Lo que estás describiendo, suena como OAuth (solo porque mencionas access-token).

Hay un buen ejemplo de OAuth que se utiliza en Salesforce a continuación ...

http://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_at_Salesforce.com

+0

Gracias por su respuesta. Descubrí que tengo que usar Username-Password oauth flow para mi necesidad. https://login.salesforce.com/help/doc/en/remoteaccess_oauth_username_password_flow.htm => este es el enlace al que nos referiremos. Pero a pesar de que he seguido los pasos, mi aplicación sigue redirigiendo. :( –

+1

¿Estás siguiendo los pasos de "oauth dance" correctamente? Recuerda que necesitas 3 cosas, request-token-url, api-url, access-token-url. – david99world

+1

SOLUCIÓN: Hola a todos, he llegado la solución a mi problema En realidad, estaba examinando la muestra que figura en el enlace http://wiki.developerforce.com/page/Getting_Started_with_the_Force.com_REST_API. Luego se implementó OAuth 2.0 Username-Password Flow que procede de https://login.salesforce.com/help /doc/en/remoteaccess_oauth_username_password_flow.htm#send_up_response. Resuelve mi problema. Gracias por su respuesta. –

5

Este es el código Java de ejemplo que utiliza nombre de usuario-contraseña OAuth flujo:

public class AccountQuery 
{ 
    // The connection data 
    private static final String query = "SELECT Name, Idfrom Account"; 
    private static final String clientId = "theID"; 
    private static final String clientSecret = "theSecret"; 
    // THis is meaningless in our context 
    private static final String redirectUri = "https://localhost:8443/_callback"; 
    private static final String environment = "https://login.salesforce.com"; 
    private static String tokenUrl = null; 
    private static final String username = "username"; 
    private static final String password = "passwordPlusSecret"; 
    private static String accessToken = null; 
    private static String instanceUrl = null; 

    public static void main(String[] args) 
    {  
     // Step 0: Connect to SalesForce. 
     System.out.println("Getting a token"); 
     tokenUrl = environment + "/services/oauth2/token"; 
     HttpClient httpclient = new HttpClient(); 
     PostMethod post = new PostMethod(tokenUrl);  
     post.addParameter("grant_type", "password"); 
     post.addParameter("client_id", clientId); 
     post.addParameter("client_secret", clientSecret); 
     post.addParameter("redirect_uri", redirectUri); 
     post.addParameter("username", username); 
     post.addParameter("password", password); 

     try { 
      httpclient.executeMethod(post); 
      try { 
       JSONObject authResponse = new JSONObject(new JSONTokener(new InputStreamReader(post.getResponseBodyAsStream()))); 
       System.out.println("Auth response: " + authResponse.toString(2)); 

       accessToken = authResponse.getString("access_token"); 
       instanceUrl = authResponse.getString("instance_url"); 

       System.out.println("Got access token: " + accessToken); 
      } catch (JSONException e) { 
       e.printStackTrace();     
      } 
     } catch (HttpException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } finally { 
      post.releaseConnection(); 
     }  
     System.out.println("We have an access token: " + accessToken + "\n" + "Using instance " + instanceUrl + "\n\n"); 

     HttpClient httpclient = new HttpClient(); 
     GetMethod get = new GetMethod(instanceUrl + "/services/data/v28.0/query"); 

     // set the token in the header 
     get.setRequestHeader("Authorization", "OAuth " + accessToken); 

     // set the SOQL as a query param 
     NameValuePair[] params = new NameValuePair[1]; 

     params[0] = new NameValuePair("q",query); 
     get.setQueryString(params);  

     try { 
      httpclient.executeMethod(get); 
      if (get.getStatusCode() == HttpStatus.SC_OK) { 
       // Now lets use the standard java json classes to work with the results 
       JSONObject response = new JSONObject(new JSONTokener(new InputStreamReader(get.getResponseBodyAsStream()))); 
       System.out.println("Query response: "+ response.toString(2));//.substring(0, 500));     
       System.out.println(response.getString("totalSize") + " record(s) returned\n\n"); 
       JSONArray results = response.getJSONArray("records");    
       Account[] accounts = new Gson().fromJson(results.toString(), Account[].class); 
       return accounts; 
      } 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     }finally { 
      get.releaseConnection(); 
     } 
    } 
}