J'essaie d'utiliser l'authentification OAuth pour obtenir le jeton d'authentification Salesforce. J'ai donc référé wiki docs , mais après l'obtention du code d'autorisation, lorsque je fais une demande de publication avec 5 paramètres obligatoires, l'exception suivante s'affiche.
{"error":"invalid_grant","error_description":"authentication failure"} CODE 400
JSON = {"error":"invalid_grant","error_description":"authentication failure"}
ce qui est, je suppose, 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?
Pour ceux qui sont aussi bloqués et frustrés que moi, j'ai laissé un blog détaillé sur l'ensemble du processus (avec des images et des commentaires élogieux!). Cliquez sur le lien si vous voulez que:
http://www.calvinfroedge.com/salesforce-how-to-generate-api-credentials/
Voici une réponse en texte seul:
Étape 1:
Créer un compte. Vous pouvez créer un compte de développeur (gratuit) sur developer.salesforce.com.
Étape 2:
Ignorer toutes les pages de destination et se lancer merde. 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 "Applications".
Étape 5:
Sous "Applications connectées", cliquez sur "Nouveau".
Étape 6:
Remplir 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 rappel (j'ai utilisé localhost).
Étape 7:
Sachez que Salesforce a une disponibilité médiocre.
Étape 8:
Appuyez sur Continuer. Vous avez enfin votre clé client_id (intitulée «Consumer Key») et votre client_secret (intitulée «Consumer Secret»).
Étape 9:
Mais attendez! Vous n'êtes pas encore fini. sélectionnez 'Manage' puis 'Edit Policies'
Assurez-vous que relaxation IP _ est défini sur assouplir les restrictions IP,
et assurez-vous que Utilisateurs autorisés est défini sur "Tous les utilisateurs peuvent s'auto-autoriser".
et assurez-vous également que votre Sécurité> Accès au réseau> Plages IP de confiance a été définie
Si vous êtes préoccupé par la désactivation de la sécurité, ne soyez pas pour le moment, vous voulez simplement que cela fonctionne pour le moment afin que vous puissiez passer des appels d'API. Resserrez les autorisations une fois que tout fonctionne, une à la fois, pour vous permettre de déterminer le paramètre qui vous donne des erreurs d'authentification.
Étape 10:
Célébrer! Cet appel 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 "[email protected]" -d "[email protected]"
sur bac à sable ou 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 "[email protected]" -d "[email protected]"
Remarques:
Vous ne devez pas autoriser de mot de passe si vous créez une application à plusieurs locataires, où les utilisateurs doivent autoriser leur propre application. Utilisez le flux de travail Oauth2 pour cela.
Vous devrez peut-être transmettre votre jeton de sécurité ajouté à votre mot de passe.
Měli jsme i tento problém.
Zkontrolujte svůjConnected Appnastavení - podSelected OAuth Scopes, budete muset upravit vybraná oprávnění. Naše aplikace využívá především Chatter , takže jsme museli přidat oba:
chatter_api
)refresh_token
).Cliquez sur le bouton "Ajouter au panier", cliquez sur "Ajouter au panier" pour obtenir un aperçu du résultat.
En savoir plus, en savoir plus chyba invalid_grant
nastala kvůli omezení IP. Liste des adresses, des adresses IP, des noms de domaine, des noms de domaine, etc. Zjistil jsem, pokud prostředí SFDC má nastavení omezení IPEnforce IP restrictionsset (Setup->Administer->Manage Apps->Connected Apps), pak každý Profil utilisateur Musí mít také povolené Adresse de propriété intellectuelle.
Salesforce exige une mise à niveau vers TLS 1.1 ou une version ultérieure avant le 22 juillet 2017 afin de s'aligner sur les meilleures pratiques de l'industrie 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 base de 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
Vérifiez ce lien pour des réponses plus détaillées: SecurityProtocol par défaut dans .NET 4.5
Pour ajouter une plage d'adresses IP à la liste blanche, procédez comme suit:
Setup
en haut à droiteAdminister
> Security Controls
> Network Access
dans le menu de navigation de gauche.New
Save
Pour OAuth 2 jetons si vous vous connectez ...
login.salesforce.com
utilisez https://login.salesforce.com/services/oauth2/tokentest.salesforce.com
, utilisez https://test.salesforce.com/services/oauth2/tokenQuand j'appelais curl https://login.salesforce.com/services/oauth2/token -d "...credentials..."
, il échouait toujours avec:
{"error":"invalid_grant","error_description":"authentication failure"}
Nous nous sommes rendu compte qu'il existe différents environnements OAuth lors de la lecture de - Approfondir nos connaissances sur OAuth 2.0 dans Salesforce spécifiquement (accentuation ajoutée):
Points de terminaison d'authentification OAuth 2.0
Les points finaux OAuth sont les URL que vous utilisez pour effectuer des demandes d'authentification OAuth auprès de Salesforce. Lorsque votre application effectue une demande d'authentification, vérifiez que vous utilisez le bon point de terminaison Salesforce OAuth. Les principaux paramètres sont:
- Autorisation - https://login.salesforce.com/services/oauth2/authorize
- Jeton - https://login.salesforce.com/services/oauth2/token
- Révoquer - https://login.salesforce.com/services/oauth2/revoke (voir Révoquer des 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, communauté ou test.salesforce.com (sandbox) domaines de ces noeuds finaux.
Comme je me suis connecté à mon environnement via test.salesforce.com
, le passage à curl https://test.salesforce.com/services/oauth2/token -d "...credentials..."
a provoqué un "Félicitations! (> ^ _ ^)> Donner une réponse au jeton OAuth"
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 votre jeton de sécurité est "XXXXXX", vous devrez entrer "MyPasswordXXXXXX" dans le champ du mot de passe.
Si vous ne possédez pas le jeton de sécurité, vous pouvez le réinitialiser comme indiqué ci-dessous.
Vous pouvez appeler votre contrôleur APEX à l’aide de Postman si vous entrez la clé du consommateur et le secret du consommateur dans les paramètres du jeton d’accès - vous n’avez pas besoin du jeton de sécurité pour cela.
Configurez l'autorisation comme sur cette capture d'écran ...
Et entrez vos informations d'identification dans la fenêtre après avoir cliqué sur le bouton Obtenir un nouveau jeton d'accès ...
Cliquez ensuite sur le bouton Demander un jeton pour générer un jeton, puis sur le bouton Utiliser un jeton. Le champ Jeton d'accès sera alors renseigné dans l'onglet Autorisation où vous appuierez sur le bouton Obtenir un nouveau jeton d'accès.
Je frappais ma tête contre le bureau en essayant de faire fonctionner cela. Il s’est avéré que mon problème était de copier-coller, ce qui a gâché le "caractère. Je suis allé et j'ai tapé manuellement" cela collé dans la ligne de commande et puis ça a marché.