Ich versuche, die OAuth-Authentifizierung zu verwenden, um das Salesforce-Authentifizierungstoken abzurufen. Daher habe ich auf Wiki-Dokumente verwiesen. Nachdem ich jedoch den Autorisierungscode erhalten habe, erhalte ich bei einer Post-Anfrage mit 5 erforderlichen Parametern die folgende Ausnahme
{"error":"invalid_grant","error_description":"authentication failure"} CODE 400
JSON = {"error":"invalid_grant","error_description":"authentication failure"}
Das ist eine schlechte Anfrage.
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());
Bitte antworten Sie, wenn Ausnahme bekannt?
salesforce
oauth-2.0
force.com
Vardan Gupta
quelle
quelle
Antworten:
Für alle, die genauso festgefahren und frustriert sind wie ich, habe ich einen detaillierten Blog-Beitrag über den gesamten Prozess hinterlassen (mit Bildern und Kommentaren!). Klicken Sie auf den Link, wenn Sie das möchten:
http://www.calvinfroedge.com/salesforce-how-to-generate-api-credentials/
Hier ist eine Antwort nur auf Text:
Schritt 1:
Ein Konto erstellen. Sie können unter developer.salesforce.com ein (kostenloses) Entwicklerkonto erstellen
Schritt 2:
Ignoriere alle Landing Pages und fange an. Es ist eine endlose Marketingschleife.
Schritt 3:
Klicken Sie auf den Link "Setup"
Schritt 4:
Klicken Sie in der linken Symbolleiste unter "Erstellen" auf "Apps".
Schritt 5:
Klicken Sie unter "Verbundene Apps" auf "Neu".
Schritt 6:
Füllen Sie das Formular aus. Wichtige Felder sind die als erforderlich gekennzeichneten Felder und der Abschnitt oauth. Beachten Sie, dass Sie für Ihren Rückruf eine beliebige URL hinterlassen können (ich habe localhost verwendet).
Schritt 7:
Beachten Sie, dass Salesforce eine schlechte Verfügbarkeit hat.
Schritt 8:
Drücken Sie Weiter. Sie haben endlich Ihren client_id-Schlüssel (mit der Bezeichnung "Consumer Key") und client_secret (mit der Bezeichnung "Consumer Secret").
Schritt 9:
Aber warte! Du bist noch nicht fertig; Wählen Sie "Verwalten" und dann "Richtlinien bearbeiten".
Stellen Sie sicher, dass die IP-Relaxation auf IP-Einschränkungen lockern eingestellt ist.
und stellen Sie sicher, dass Zulässige Benutzer auf "Alle Benutzer dürfen sich selbst autorisieren" eingestellt ist.
Stellen Sie außerdem sicher, dass Sicherheit> Netzwerkzugriff> Vertrauenswürdige IP-Bereiche festgelegt wurde
Wenn Sie Bedenken haben, die Sicherheit zu deaktivieren, sollten Sie dies erst einmal tun. Sie möchten nur, dass dies jetzt funktioniert, damit Sie API-Aufrufe durchführen können. Verschärfen Sie die Berechtigungen, sobald alles nacheinander funktioniert, damit Sie herausfinden können, welche Einstellung zu Authentifizierungsfehlern führt.
Schritt 10:
Feiern! Dieser Curl-Aufruf sollte erfolgreich sein:
bei der Produktion :
auf Sandkasten oder Test :
Anmerkungen:
Sie sollten keine Kennwortautorisierung durchführen, wenn Sie eine mandantenfähige App erstellen, in der Benutzer ihre eigene Anwendung autorisieren müssen. Verwenden Sie dazu den Oauth2-Workflow.
Möglicherweise müssen Sie Ihr Sicherheitstoken übergeben, das an Ihr Kennwort angehängt ist.
quelle
invalid_grant
Wir hatten auch dieses Problem.
Überprüfen Sie Ihre Connected AppEinstellungen - unter Selected OAuth Scopesmüssen Sie möglicherweise die ausgewählten Berechtigungen anpassen. Unsere App verwendet hauptsächlich Chatter , daher mussten wir beide hinzufügen:
chatter_api
)refresh_token
).Auch hier kann Ihr Kilometerstand variieren. Probieren Sie jedoch verschiedene Kombinationen von Berechtigungen aus, je nachdem, was Ihre Anwendung tut / benötigt.
Darüber hinaus
invalid_grant
scheint der eigentliche Fehler aufgrund von IP-Einschränkungen aufzutreten . Stellen Sie sicher, dass die IP-Adresse des Servers zulässig ist, auf dem der OAuth-Authentifizierungscode ausgeführt wird. Ich habe festgestellt, dass jedes Benutzerprofil auch die zulässigen IP-Adressen haben muss , wenn in der SFDC-Umgebung die Einstellung für Enforce IP restrictionsdie IP-Einschränkung festgelegt ist ( Setup-> Administer-> Manage Apps->Connected Apps ) .quelle
TL: DR
Für OAuth 2-Token, wenn Sie sich anmelden ...
login.salesforce.com
Verwendung von https://login.salesforce.com/services/oauth2/tokentest.salesforce.com
Verwendung von https://test.salesforce.com/services/oauth2/tokenGeschichte:
Als ich es anrief, schlug
curl https://login.salesforce.com/services/oauth2/token -d "...credentials..."
es immer noch fehl mit:{"error":"invalid_grant","error_description":"authentication failure"}
Lösung:
Beim Lesen von Digging Deeper in OAuth 2.0 in Salesforce wurden verschiedene OAuth-Umgebungen erkannt (Hervorhebung hinzugefügt):
Fix
Weil ich in meiner Umgebung angemeldet über
test.salesforce.com
dem Umschaltencurl https://test.salesforce.com/services/oauth2/token -d "...credentials..."
in einer Folge "Congrats! (> ^ _ ^)> Give OAuth - Token Antwort"quelle
Salesforce erfordert ein Upgrade auf TLS 1.1 oder höher bis zum 22. Juli 2017, um die branchenüblichen Best Practices für Sicherheit und Datenintegrität zu erfüllen : von help.salesforce.com .
Versuchen Sie, diesen Code hinzuzufügen:
Eine weitere Option ist das Bearbeiten Ihrer Registrierung:
Überprüfen Sie diesen Link für detailliertere Antworten: Standard SecurityProtocol in .NET 4.5
quelle
Gehen Sie folgendermaßen vor, um einen IP-Adressbereich auf die Whitelist zu setzen:
Setup
oben rechtsAdminister
>Security Controls
> inNetwork Access
der linken NavigationsNew
Save
quelle
Ersetzen Sie Ihr Salesforce-Kennwort durch eine Kombination aus Kennwort und Sicherheitstoken. Wenn Ihr Kennwort beispielsweise "MyPassword" und Ihr Sicherheitstoken "XXXXXX" lautet, müssen Sie "MyPasswordXXXXXX" in das Kennwortfeld eingeben.
Wenn Sie nicht über das Sicherheitstoken verfügen, können Sie es wie folgt zurücksetzen.
quelle
Sie können Ihren APEX-Controller mit Postman aufrufen, wenn Sie in den Einstellungen für das Zugriffstoken den Verbraucherschlüssel und das Verbrauchergeheimnis eingeben. Dafür benötigen Sie das Sicherheitstoken nicht.
Richten Sie die Autorisierung wie folgt ein ...
Postbote OAuth 2.0
Geben Sie Ihre Anmeldeinformationen in das Fenster ein, nachdem Sie auf die Schaltfläche Neuen Zugriffstoken erhalten geklickt haben ...
Zugriffstoken erhalten
Klicken Sie dann auf die Schaltfläche Token anfordern, um ein Token zu generieren. Klicken Sie dann auf die Schaltfläche Token verwenden. Das Feld Zugriffstoken wird auf der Registerkarte Autorisierung ausgefüllt, auf der Sie auf die Schaltfläche Neues Zugriffstoken abrufen klicken.
quelle
Ich schlug meinen Kopf gegen den Schreibtisch und versuchte, das zum Laufen zu bringen. Es stellte sich heraus, dass mein Problem das Kopieren und Einfügen war, was das "Zeichen. Ich habe manuell getippt" in die Befehlszeile eingefügt und dann funktionierte es.
quelle
Ich hatte den gleichen Fehler mit allen richtig eingestellten Tasten und verbrachte viel Zeit damit, herauszufinden, warum ich keine Verbindung herstellen kann.
Schließlich habe ich festgestellt, dass in Setup -> Verbundene Apps verwalten -> Klicken Sie auf "MyAppName" -> Klicken Sie auf "Richtlinien bearbeiten" .
Im Feld "Zulässige Benutzer" sollte der Wert "Alle Benutzer dürfen sich selbst autorisieren" festgelegt werden.
quelle
Stellen Sie sicher, dass Ihr Passwort nur alphanumerische Zeichen enthält.
quelle
Ich habe viele der oben genannten Lösungen ausprobiert, die für mich nicht funktionierten. Der Trick, der für mich tatsächlich funktionierte, bestand jedoch darin, die Verwendung von Curl zu beenden und stattdessen die Postbotenanwendung zu verwenden, um die Anfrage zu stellen.
Durch Replizieren der Anfrage in Postman mit einer POST-Anfrage und den folgenden Parametern
Dies löste das Problem für mich.
Posten Sie es einfach hier, falls es andere gibt, die alle möglichen Lösungen ohne Erfolg ausprobiert haben (wie ich).
quelle