88 votes

L'authentification de Salesforce échoue

J'essaye d'utiliser l'authentification OAuth pour obtenir le jeton d'authentification Salesforce, donc j'ai fait référence à Documents wiki mais après avoir obtenu le code d'autorisation, lorsque je fais une demande de poste avec 5 paramètres requis, j'obtiens l'exception suivante

{"error":"invalid_grant","error_description":"authentication failure"} CODE 400
JSON = {"error":"invalid_grant","error_description":"authentication failure"}

ce qui est, je pense, une mauvaise demande.

PostMethod post = new PostMethod("https://login.salesforce.com/services/oauth2/token");
post.addParameter("code",##############);
post.addParameter("grant_type","authorization_code");
post.addParameter("redirect_uri","#################");  
post.addParameter("client_id",this.client_id);
post.addParameter("client_secret",this.client_secret);
httpclient.executeMethod(post);
String responseBody = post.getResponseBodyAsString();
System.out.println(responseBody+" CODE "+post.getStatusCode());

Veuillez répondre, si l'exception est connue ?

0voto

bjorn Points 81

En plus de suivre les suggestions ci-dessus, j'ai découvert que Salesforce n'aimait pas la manière dont axios encodait les données en JSON. Je suis passé de l'encodage JSON par défaut à l'utilisation de qs pour stringifier et poster comme données de formulaire et cela a fonctionné. Je ne suis toujours pas sûr pourquoi Salesforce n'a pas apprécié la version JSON. Si quelqu'un a une meilleure idée, je suis curieux d'en savoir plus.

Ça a marché :

axios.post(
  url,
  qs.stringify({
    grant_type: "password",
    username: process.env.USERNAME,
    password: process.env.PASSWORD,
    client_id: process.env.SF_ID,
    client_secret: process.env.SF_SECRET,
  }),
  { headers: "Content-Type": "application/x-www-form-urlencoded", },
)

Ce n'est pas le cas :

axios.post(
  url,
  {
    grant_type: "password",
    username: process.env.SF_USERNAME,
    password: process.env.SF_PASSWORD,
    client_id: process.env.SF_ID,
    client_secret: process.env.SF_SECRET,
   }
);

0voto

bmich72 Points 31

J'ai eu ce problème et après avoir essayé plusieurs tutoriels sans succès, je suis tombé sur un article qui disait que Salesforce n'acceptait pas un mot de passe contenant des caractères spéciaux ( !, @ ,#). J'ai changé mon mot de passe dans Salesforce pour un mot de passe sans caractères spéciaux et j'ai finalement réussi à le faire fonctionner.

-1voto

Sai Points 451

J'ai essayé de nombreuses solutions ci-dessus qui n'ont pas fonctionné pour moi. Cependant, l'astuce qui a réellement fonctionné pour moi a été d'arrêter d'utiliser curl et d'utiliser facteur pour faire la demande à la place.

En répliquant la requête dans postman, avec une requête POST et les paramètres suivants

  1. type de subvention
  2. client_id
  3. secret du client
  4. nom d'utilisateur
  5. mot de passe

Cela a résolu le problème pour moi.

Je le poste ici au cas où d'autres personnes auraient essayé toutes les solutions possibles sans succès (comme moi).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X