java - developer - ¿Salesforce REST API Login?
salesforce rest service authentication (4)
Estoy examinando una muestra que está en el sitio del desarrollador de Salesforce.
En esa muestra, cuando hacemos clic en un enlace, será redirigido 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, la variable de entorno se establece en,
"https://login.salesforce.com"
¿Qué debo hacer para evitar el redireccionamiento a la página de inicio de sesión de salesforce?
En el caso de Java, la forma más sencilla es usar Spring Social Salesforce: https://github.com/iirekm/spring-social-salesforce
Simplemente siga el tutorial de Facebook en https://spring.io/guides/gs/accessing-facebook/ , y en pocas palabras agregue la dependencia a Spring Social Salesforce y reemplace en todas partes el código "facebook" con "salesforce".
Este es un código Java de muestra que utiliza el flujo de OAuth de nombre de usuario y contraseña:
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();
}
}
}
Lo que estás describiendo, suena como OAuth (solo porque mencionas el token de acceso).
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
SOLUCIÓN:
Hola a todos, he llegado la solución a mi problema. En realidad, estaba examinando la muestra que aparece en el enlace wiki.developerforce.com/page/… . Luego implementó el flujo de nombre de usuario y contraseña OAuth 2.0 que se encuentra en login.salesforce.com/help/doc/en/… . Resuelve mi problema.