É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?
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.
-
assurez-vous "1519650920 de l'IP" détente est réglé sur Détendez-vous des restrictions IP ,
-
et assurez-vous que les Utilisateurs Autorisés est fixé à "Tous les utilisateurs peuvent s'autoriser.",
-
et assurez-vous également que la plage IP de votre sécurité > accès au réseau > de confiance a été définie
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.
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.
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
pour whitelist an IP address range suivre ces étapes:
- cliquez sur
Setup
en haut à droite - sélectionner
Administer
>Security Controls
>Network Access
de la navigation de gauche - , Cliquez sur
New
- Ajouter votre plage d'adresses ip
- , Cliquez sur
Save
TL: DR
pour 2 tokens OAuth si vous vous connectez...
- À
login.salesforce.com
utiliser https://login.salesforce.com/services/oauth2/token - à
test.salesforce.com
utiliser https://test.salesforce.com/services/oauth2/token
Histoire:
- j'ai été suivant Salesforce "configurer l'authentification OAuth 2,0"
- les lettres de créance étaient correctes (plusieurs caractères par vérification de caractères)
-
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:
- autorisation - https://login.salesforce.com/services/oauth2/authorize
- Token - https://login.salesforce.com/services/oauth2/token
- révocation - https://login.salesforce.com/services/oauth2/revoke (voir révoquer les jetons OAuth pour plus de détails sur la révocation de l'accès)
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 "
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é.
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 ?