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 ?

218voto

Calvin Froedge Points 3569

Pour tous ceux qui sont aussi coincés et frustrés que moi, j'ai laissé un billet de blog détaillé sur l'ensemble du processus (avec des photos et des commentaires délirants !). Cliquez sur le lien si vous voulez le lire :

http://www.calvinfroedge.com/salesforce-how-to-generate-api-credentials/

Voici une réponse sous forme de texte seulement :

Étape 1 :

Créer un compte. Vous pouvez créer un compte de développeur (gratuit) à l'adresse developer.salesforce.com.


Étape 2 :

Ignorez toutes les pages d'atterrissage et les conneries de démarrage. C'est une boucle marketing sans fin.


Étape 3 :

Cliquez sur le lien "Setup".


Étape 4 :

Dans la barre d'outils de gauche, sous "Créer", cliquez sur "Apps".


Étape 5 :

Sous "Apps connectées", cliquez sur "Nouveau".


Étape 6 :

Remplissez le formulaire. Les champs importants sont ceux qui sont marqués comme obligatoires, et la section oauth. Notez que vous pouvez laisser n'importe quelle url pour votre callback (j'ai utilisé localhost).


Étape 7 :

Sachez que la disponibilité de Salesforce est mauvaise.


Étape 8 :

Appuyez sur "Continuer". Vous avez enfin votre clé client_id (appelée "Consumer Key") et votre secret client_secret (appelé "Consumer Secret").


Étape 9 :

Mais attendez ! Vous n'avez pas encore terminé ; sélectionnez "Gérer" puis "Modifier les politiques".

  1. Assurez-vous que Détente IP est réglé sur Assouplir les restrictions IP ,

  2. et assurez-vous que les utilisateurs autorisés sont réglés sur "Tous les utilisateurs peuvent s'auto-autoriser",

  3. et assurez-vous également que le paramètre Sécurité > Accès au réseau > Plages d'adresses IP de confiance a été défini.

OAuth settings

Security > Network Access > Trusted IP Ranges

Si vous êtes préoccupé par la désactivation de la sécurité, ne le soyez pas pour l'instant, vous voulez juste que cela fonctionne pour l'instant afin de pouvoir faire des appels API. Une fois que tout fonctionne, resserrez les permissions, une par une, afin de déterminer quel paramètre est à l'origine des erreurs d'authentification.


Étape 10 :

Célébrez ! Cet appel au curl devrait réussir :

sur production :

curl -v https://login.salesforce.com/services/oauth2/token \
  -d "grant_type=password" \
  -d "client_id=YOUR_CLIENT_ID_FROM_STEP_8" \
  -d "client_secret=YOUR_CLIENT_SECRET_FROM_STEP_8" \
  -d "username=user@wherever.com" -d "password=foo@bar.com"

sur bac à sable o test :

curl -v https://test.salesforce.com/services/oauth2/token \
  -d "grant_type=password" \
  -d "client_id=YOUR_CLIENT_ID_FROM_STEP_8" \
  -d "client_secret=YOUR_CLIENT_SECRET_FROM_STEP_8" \
  -d "username=user@wherever.com" -d "password=foo@bar.com"

Notes :

  • Vous ne devriez pas utiliser l'autorisation par mot de passe si vous créez une application multi-tenant, où les utilisateurs doivent autoriser leur propre application. Utilisez le workflow Oauth2 pour cela.

  • Vous devrez peut-être transmettre votre jeton de sécurité en plus de votre mot de passe.

14voto

dotNetkow Points 966

Nous avons eu ce problème également.

Vérifiez votre Connected App paramètres - sous Selected OAuth Scopes vous devrez peut-être ajuster les autorisations sélectionnées. Notre application utilise principalement Bavardage Nous avons donc dû ajouter les deux :

  • Accédez et gérez votre flux Chatter ( chatter_api )
  • effectuer des demandes en votre nom à tout moment ( refresh_token ).

Encore une fois, votre kilométrage peut varier, mais essayez différentes combinaisons de permissions en fonction de ce que votre application fait/besoin.

En outre, les invalid_grant L'erreur semble se produire en raison de Restrictions IP . Assurez-vous que l'adresse IP du serveur qui exécute le code d'authentification OAuth est autorisée. J'ai constaté que si l'environnement SFDC a un paramètre de restriction IP Enforce IP restrictions set ( Setup -> Administer -> Manage Apps -> Connected Apps ), alors chaque Profil de l'utilisateur doit aussi avoir les adresses IP autorisées.

12voto

3ygun Points 913

TL:DR

Pour les jetons OAuth 2, si vous vous connectez...

Histoire :

  1. Je suivais Salesforce "Set Up OAuth 2.0" (en anglais)
  2. Les informations d'identification sont correctes (nombreuses vérifications caractère par caractère).
  3. Quand j'appelais curl https://login.salesforce.com/services/oauth2/token -d "...credentials..." il a encore échoué avec :

    {"error":"invalid_grant","error_description":"authentication failure"}

Solution :

Réalisé qu'il y a différents environnements OAuth en lisant Approfondissement de OAuth 2.0 dans Salesforce spécifiquement (c'est nous qui soulignons) :

Points de terminaison de l'authentification OAuth 2.0

Les points de terminaison OAuth sont les URL que vous utilisez pour faire des demandes d'authentification OAuth à Salesforce. Lorsque votre application effectue une demande d'authentification, assurez-vous que vous utilisez le bon point de terminaison OAuth de Salesforce. Les principaux points de terminaison sont les suivants :

Au lieu de login.salesforce.com Les clients peuvent également utiliser le Mon domaine , communauté o test.salesforce.com (sandbox) dans ces points de terminaison.

Fixer

Parce que je me suis connecté à mon environnement via test.salesforce.com en passant à curl https://test.salesforce.com/services/oauth2/token -d "...credentials..." a donné lieu à un "Félicitations ! (>^_^)> Donnez la réponse au jeton OAuth"

7voto

Troy Harvey Points 613

Pour mettre une plage d'adresses IP sur une liste blanche, procédez comme suit :

  1. Cliquez sur Setup dans le coin supérieur droit
  2. Sélectionnez Administer > Security Controls > Network Access à partir de la navigation de gauche
  3. Cliquez sur New
  4. Ajoutez votre plage d'adresses IP
  5. Cliquez sur Save

7voto

Amir M Points 170

Salesforce exige une mise à niveau vers TLS 1.1 ou supérieur d'ici le 22 juillet 2017 afin de s'aligner sur les meilleures pratiques du secteur en matière de sécurité et d'intégrité des données : de help.salesforce.com .

essayez d'ajouter ce code :

System.Net.ServicePointManager.SecurityProtocol = 
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

Une autre option consiste à modifier votre registre :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

Consultez ce lien pour des réponses plus détaillées : Protocole de sécurité par défaut dans .NET 4.5

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