2011-05-23 32 views
5

Estoy usando salesforce rest api para acceder a la cuenta de salesforce de mi aplicación rails. Creé una aplicación de acceso remoto y obtuve la clave N the id. Pude autenticar al usuario y obtener auth_token, url de instancia y todo eso. Pero, cuando envío petición en "instance_url/servicios/datos/v20.0" junto con el token de acceso, me sale este error:salesforce rest api INVALID_SESSION_ID error

[{"message":"Session expired or invalid","errorCode":"INVALID_SESSION_ID"}] 

tengo una cuenta de desarrollador de la fuerza de ventas y tienen API habilitada verdad para cada perfil , excepto el perfil "Sitio web autenticado" (que no es accesible).

Por favor, ¿alguien me puede ayudar con esto?

estoy autenticar al usuario siguiente petición

HTTParty.post "login.salesforce.com/services/oauth2/token";, :body=>{"grant_type"=>"authorization_code","code"=>"abc}","client_secret"=>"abc"‌​, "client_id"=>"abc","format"=>"json","redirect_uri"=>"localhost:3000/salesforce/callback";} 

que está regresando la firma, identificación, instance_url, issued_at, señal_acceso y refresh_token

HTTParty.get "ap1.salesforce.com/services/data/v20.0";, :headers=>{"Authentication"=>"OAuth access_token", "Content-Type"=>"application/json"} 

que responde con

[{"errorCode"=>"INVALID_SESSION_ID", "message"=>"Session expired or invalid"}] 
+0

¿Tiene acceso remoto configurado correctamente en su org Salesforce? También podría ser útil si publicaste tu código de inicio de sesión/consulta. – lnediger

Respuesta

8

¿Cómo está pasando la sesión ID a la solicitud /services/data/v20.0 ?, si su acc ess_token es abc123 luego necesitas un encabezado http de Authorization: OAuth abc123 en la solicitud.

+0

Estoy obteniendo una respuesta exitosa si envío una solicitud para las versiones de la API ............. "instance_url/services/data /" (con access_token envuelto en el encabezado) devuelve [{"label"] => "Invierno '11", "url" => "/ services/data/v20.0", "version" => "20.0"}, {"label" => "Spring '11", "url" = > "/ services/data/v21.0", "version" => "21.0"}] ............. ¿Algo más que busque? – Saums

+0

el recurso de versiones no requiere autenticación, por lo que no prueba nada. ¿Por qué no publicas algún código y/o tu solicitud real? – superfell

+0

estoy autenticando al usuario con la siguiente solicitud ....... HTTParty.post "https://login.salesforce.com/services/oauth2/token",: body => {"grant_type" => "authorization_code "," código "=>" abc} "," client_secret "=>" abc "," client_id "=>" abc "," formato "=>" json "," redirect_uri "=>" http: // localhost : 3000/salesforce/callback "} ........... que me devuelve firma, id, instance_url, issued_at, access_token y refresh_token – Saums

2

La sesión de API en Salesforce expira independientemente de si hay actividades o no. para establecer la duración de cada sesión vaya a Setup > Administration Setup > Security Controls > Session Settings>

el máximo es de 8 horas.

¡salud!

+0

No creo que sea el problema porque el tiempo de sesión está establecido en 2 horas y estoy enviando la solicitud inmediatamente después de obtener el access_token ........... .... También obtengo una respuesta exitosa si envío una solicitud para las versiones de la API ............. "instance_url/services/data /" (con access_token envuelto en el encabezado) regresa [ {"label" => "Winter '11", "url" => "/ services/data/v20.0", "version" => "20.0"}, {"label" => "Spring '11", "url" => "/ services/data/v21.0", "version" => "21.0"}] ............. ¿Algo más que busque? – Saums

0

Cuestiones yo nos encontramos con:

  • Asegúrese de incluir el alcance de "web" en la solicitud de autorizar, por ejemplo,

  • Uso del instanceUrl que se devuelve en la respuesta Autorizar. En mi caso se trataba de https://eu2.salesforce.com y siempre trató de usar https://na1.salesforce.com que no funcionaba

0

enfrentado el mismo problema y en mi caso <> caracteres de la contraseña estaban causando el problema.

0

Agrego esta respuesta porque alguna de las respuestas anteriores me ha ayudado. Mi problema era que estaba usando access_token como lo recibí en la respuesta JSON durante login.salesforce.com/services/oauth2/token solicitudes.

Tienes que elimine el ID de señal_acceso, como se describe en la documentación de SalesForce: "Substitute the ID for the token value"