Salesforce-Authentifizierung fehlgeschlagen

71

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?

Vardan Gupta
quelle
Hast du eine Lösung gefunden? Ich stehe auch vor dem gleichen Problem.
Govind Malviya
In Salesforce können wir nur gültige E-Mail-Domänen verwenden, dh es sind keine Testdomänen wie yopmail.com, mailinator.com usw. zulässig.
Vardan Gupta
Wie haben Sie den Code bekommen
Überprüfen Sie Ihren IP-Bereich. Gehen Sie zu Ihrem Namen -> Meine Einstellungen -> Persönlich -> Mein Sicherheitstoken zurücksetzen. Sie müssen dieses Token wie folgt an das Kennwort anhängen: Kennwort + Token. Versuchen!
Nguyễn Thắng

Antworten:

184

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".

  1. Stellen Sie sicher, dass die IP-Relaxation auf IP-Einschränkungen lockern eingestellt ist.

  2. und stellen Sie sicher, dass Zulässige Benutzer auf "Alle Benutzer dürfen sich selbst autorisieren" eingestellt ist.

  3. Stellen Sie außerdem sicher, dass Sicherheit> Netzwerkzugriff> Vertrauenswürdige IP-Bereiche festgelegt wurde

OAuth-Einstellungen

Sicherheit> Netzwerkzugriff> Vertrauenswürdige IP-Bereiche

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 :

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]"

auf Sandkasten oder 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]"

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.

Calvin Froedge
quelle
10
Wow ... Vielen Dank ... Schritt 9 ist einfach großartig, was mich aus dem Kampf gezogen hat
Azeez
6
Müssen wir bei Verwendung der OAuth-Anmeldung ein Sicherheitstoken mit Kennwort übergeben? Ich erhalte den gleichen Fehlerinvalid_grant
Dory
2
Toller Führer und es hat fast für mich funktioniert. Das Problem, das ich bekam, ist, dass die in Schritt 10 verwendete URL nicht funktioniert hat, weil wir eine Subdomain haben. <my_domain> .my.saleforce.com. Hoffentlich hat sonst niemand Zeit damit verschwendet.
Mikael Svensson
6
Mein Problem war schließlich, dass Ihr Passwort bestimmte Sonderzeichen nicht enthalten kann! wtg sf!
John.stein
4
Vielen Dank, ich komme jedes Mal auf diesen Prozess zurück, wenn ich diese Seite finden muss. Ich kann nicht glauben, wie schwierig es ist, in Salesforce zu navigieren.
Newdark-It
14

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:

  • Greifen Sie auf Ihren Chatter-Feed zu und verwalten Sie ihn ( chatter_api)
  • Führen Sie jederzeit Anfragen in Ihrem Namen aus ( 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_grantscheint 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 ) .

dotNetkow
quelle
3
Danke ... ich hatte das gleiche Problem. Die Standardeinstellung für die App ist "IP-Einschränkung erzwingen". Sie müssen dies also unter "Setup" -> "Verwalten" -> "Apps verwalten" -> "Verbundene Apps" ... wie oben beschrieben lockern.
Dacology
9

TL: DR

Für OAuth 2-Token, wenn Sie sich anmelden ...

Geschichte:

  1. Ich habe Salesforce "OAuth 2.0 einrichten" verfolgt.
  2. Die Anmeldeinformationen waren korrekt (viele Zeichen für Zeichenprüfungen).
  3. 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):

OAuth 2.0-Authentifizierungsendpunkte

OAuth-Endpunkte sind die URLs, mit denen Sie OAuth-Authentifizierungsanforderungen an Salesforce senden. Wenn Ihre Anwendung eine Authentifizierungsanforderung stellt, stellen Sie sicher, dass Sie den richtigen Salesforce OAuth-Endpunkt verwenden. Die primären Endpunkte sind:

Anstelle von login.salesforce.com können Kunden an diesen Endpunkten auch die Domänen Meine Domäne , Community oder test.salesforce.com (Sandbox) verwenden.

Fix

Weil ich in meiner Umgebung angemeldet über test.salesforce.comdem Umschalten curl https://test.salesforce.com/services/oauth2/token -d "...credentials..."in einer Folge "Congrats! (> ^ _ ^)> Give OAuth - Token Antwort"

3ygun
quelle
7

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:

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

Eine weitere Option ist das Bearbeiten Ihrer Registrierung:

[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

Überprüfen Sie diesen Link für detailliertere Antworten: Standard SecurityProtocol in .NET 4.5

Amir M.
quelle
Verwandte Github-Problem für einen Salesforce-Oauth-Anbieter github.com/TerribleDev/OwinOAuthProviders/issues/177
Ben Wilde
5

Gehen Sie folgendermaßen vor, um einen IP-Adressbereich auf die Whitelist zu setzen:

  1. Klicken Sie Setupoben rechts
  2. Wählen Sie Administer> Security Controls> in Network Accessder linken Navigations
  3. Klicken New
  4. Fügen Sie Ihren IP-Adressbereich hinzu
  5. Klicken Save
Troy Harvey
quelle
4

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.

  • Gehen Sie zu Ihrem Namen -> Meine Einstellungen -> Persönlich -> Mein Sicherheitstoken zurücksetzen.
Satish Tata
quelle
3

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.

Kevin
quelle
1
Willkommen bei Stackoverflow. Erläutern Sie Ihre Antwort ausführlich mit Schritten oder Code-Snippets, damit diese für alle verständlich sind.
Şivā SankĂr
aktualisierter Originalbeitrag mit weiteren Anweisungen und einem weiteren Screenshot
Kevin
1
Ich kann Ihnen nicht genug dafür danken, dass Sie Ihre Anweisungen zum Abrufen des Zugriffstokens bei Postman veröffentlicht haben. Die "Schnellstart" -Anweisungen im Salesforce "REST API Developer Guide" sind leider weniger als wertlos, wenn es darum geht, Salesforce zu konfigurieren und das Zugriffstoken abzurufen, das für ALLE CURL-Befehle erforderlich ist (Autorisierung: Bearer <das Zugriffstoken>). .
jerhewet
1

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.

Dieser Kerl
quelle
1

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.

algot
quelle
1

Stellen Sie sicher, dass Ihr Passwort nur alphanumerische Zeichen enthält.

Schärpe
quelle
-1

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

  1. grant_type
  2. Kunden ID
  3. client_secret
  4. Nutzername
  5. Passwort

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).

Sai
quelle