Échec De L'Authentification Salesforce

j'essaie d'utiliser l'authentification OAuth pour obtenir le Token D'authentification Salesforce, donc j'ai fait référence à wiki docs , mais après avoir obtenu le code d'autorisation, quand je fais une demande Post avec 5 paramètres requis, je reçois l'exception suivante

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

ce qui est 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 exception connue?

35
demandé sur mac9416 2012-10-09 10:48:05

7 réponses

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 rauques!). Cliquez sur le lien si vous voulez que:

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

Voici une réponse textuelle:

Étape 1:

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


Étape 2:

Ignorer toutes les pages d'accueil et de commencer Merde. C'est une boucle de 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" Applications connectées "cliquez sur" Nouveau "


Étape 6:

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


Étape 7:

sachez que Salesforce a une disponibilité merdique.


Étape 8:

Appuyez sur continuer. Vous avez enfin votre clé (ID client) et secret (secret client).


Étape 9:

mais attendez! Vous n'êtes pas encore fini.

  1. assurez-vous "1519650920 de l'IP" détente est réglé sur Détendez-vous des restrictions IP ,

  2. et assurez-vous que les Utilisateurs Autorisés est fixé à "Tous les utilisateurs peuvent s'autoriser.",

  3. et assurez-vous également que la plage IP de votre sécurité > accès au réseau > de confiance a été définie

OAuth settings

Security  Network Access  Trusted IP Ranges

si vous êtes préoccupé par désactiver la sécurité, ne le soyez pas pour l'instant, vous voulez juste que cela fonctionne pour l'instant afin que vous puissiez faire des appels API. Resserrez les permissions une fois que tout fonctionne, un à la fois, pour que vous puissiez comprendre quel paramètre vous donne des erreurs d'authentification.


Étape 10:

Celebrate! Cet appel Bouclé 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 ou essai :

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 faire d'autorisation de mot de passe si vous construisez une application multi-locataires, où les utilisateurs doivent autoriser leur propre application. Utilisez le workflow Oauth2 pour cela.

  • vous devrez peut-être ajouter votre jeton de sécurité à votre le mot de passe.

94
répondu Calvin Froedge 2018-06-23 12:57:39

nous avions aussi ce problème.

Vérifiez votre App connectée paramètres-sous Scopes sélectionnés , vous pouvez avoir besoin d'ajuster les permissions sélectionnées. Notre application utilise principalement Chatter , nous avons donc dû ajouter à la fois:

  • accédez et gérez votre chatter feed ( chatter_api )
  • effectuer des requêtes en votre nom à tout moment ( refresh_token ).

encore une fois, votre kilométrage peut varier mais essayez différentes combinaisons de permissions basées sur ce que votre Application fait/a besoin.

de plus, l'erreur invalid_grant 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 trouvé que si L'environnement SFDC a un paramètre de restriction IP appliquer les restrictions D'IP ensemble ( "1519100920 Setup - > administrer - > Gérer les applications - > applications connectées ), puis chaque profil D'utilisateur doit avoir L'IP autorisée adresses aussi.

12
répondu dotNetkow 2017-11-09 13:29:46

Salesforce a besoin d'une mise à niveau à TLS 1.1 ou plus d'ici le 22 juillet 2017 afin de s'aligner avec les meilleures pratiques de l'industrie pour la sécurité et l'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 est de 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

voir ce lien pour des réponses plus détaillées: Default SecurityProtocol in .net 4.5

5
répondu Amir M 2017-05-23 12:10:27

pour whitelist an IP address range suivre ces étapes:

  1. cliquez sur Setup en haut à droite
  2. sélectionner Administer > Security Controls > Network Access de la navigation de gauche
  3. , Cliquez sur New
  4. Ajouter votre plage d'adresses ip
  5. , Cliquez sur Save
3
répondu Troy Harvey 2016-01-05 21:11:32

TL: DR

pour 2 tokens OAuth si vous vous connectez...

Histoire:

  1. j'ai été suivant Salesforce "configurer l'authentification OAuth 2,0"
  2. les lettres de créance étaient correctes (plusieurs caractères par vérification de caractères)
  3. quand j'appelais curl https://login.salesforce.com/services/oauth2/token -d "...credentials..." ça ne marchait pas avec:

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

Solution:

S'est rendu compte qu'il y a différents environnements de OAuth à la lecture de creuser plus profondément dans OAuth 2.0 dans Salesforce spécifiquement (italique ajouté):

Une Authentification OAuth 2.0 Points De Terminaison

OAuth endpoints sont les URLs que vous utilisez pour faire des requêtes d'authentification OAuth à Salesforce. Lorsque votre application fait une demande d'authentification, assurez-vous d'utiliser le bon endpoint Salesforce OAuth. Les principaux paramètres sont les suivants:

au lieu de login.salesforce.com , les clients peuvent également utiliser le mon domaine , la communauté , ou test.salesforce.com (bac à sable) dans les domaines de ces paramètres.

Fix

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 abouti à un " félicitations! ( > ^ ^ ^ ^ ^ ) > Donner une réponse symbolique "

2
répondu 3ygun 2018-04-18 18:40:04

remplacez votre mot de passe Salesforce par une combinaison du mot de passe et du jeton de sécurité. Par exemple, si votre mot de passe est "MyPassword" et que votre jeton de sécurité est "XXXXXX", vous devez entrer "MYPASSWORDXXXXXX" dans le champ Mot de passe.

Si vous n'avez pas le jeton de sécurité, vous pouvez le réinitialiser comme ci-dessous.

  • allez à votre nom --> Mes paramètres --> personnel --> réinitialiser mon Token de sécurité.
1
répondu Satish Tata 2018-07-10 07:30:55

j'utilise l'api Salesforce soap avec le format de requête suivant

<?xml version="1.0" encoding="utf-8" ?>
        <env:Envelope
                xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:urn="urn:partner.soap.sforce.com">
            <env:Header>
                <urn:CallOptions>
                    <urn:client>client_id</urn:client>
                    <urn:defaultNamespace>sf</urn:defaultNamespace>
                </urn:CallOptions>
            </env:Header>
            <env:Body>
                <n1:login xmlns:n1="urn:partner.soap.sforce.com">
                    <n1:username>username</n1:username>
                    <n1:password>password+security_token</n1:password>
                </n1:login>
            </env:Body>
        </env:Envelope>

j'ai réussi à me connecter mais l'application ne s'affiche pas comme ma configuration. Quand j'ai essayé cette méthode, ça marchait.

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 "

est-ce que quelqu'un peut me dire ce que je fais de mal ou l'api soap de salesforce ne supporte pas cela ?

-3
répondu Sachin Aryal 2017-12-15 05:44:34