Error mit SalesForce-Authentifizierung von C # -Clients

Ich bin neu bei SalesForce und arbeite daran, mich mit den Grundlagen vertraut zu machen, da wir nächste Woche mit einem großen Integrationsprojekt beginnen werden. Zumindest für einen Teil unserer Integration müssen wir auf die SalesForce Rest API zugreifen. Zu diesem Zweck haben ein anderer Gentleman in meinem Team und ich einige grundlegende Prototypen von Anrufen mithilfe von Postman mit gutem Erfolg erstellt, insbesondere im Bereich der OAuth2-Authentifizierung. Unser Problem ist, dass, während in Postman alles gut zu funktionieren scheint, sobald wir auf die Verwendung von C # umschalten, um die Anrufe zu tätigen, anstelle unseres Authentifizierungstokens ein Fehler angezeigt wird. Die Antwort lautet HTTP Status 400 Bad Request und der Inhalt der Antwort lautet

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

Hier ist ein Beispiel für einen Teil des C # -Codes, den wir ausprobiert haben:

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Web;

namespace SFTokenTest
{
    internal class Program
    {
        private const string LoginUrl = "https://test.salesforce.com/services/oauth2/token";

        private static void Main(string[] args)
        {
            FormUrlEncodedContent content = new FormUrlEncodedContent(new []
            {
            new KeyValuePair<string, string>("grant_type",HttpUtility.UrlEncode("password")),
            new KeyValuePair<string, string>("password",HttpUtility.UrlEncode("PASSWORD")),
            new KeyValuePair<string, string>("username", HttpUtility.UrlEncode("USERNAME")),
            new KeyValuePair<string, string>("client_id",HttpUtility.UrlEncode("CLIENTID")),
            new KeyValuePair<string, string>("client_secret",HttpUtility.UrlEncode("CLIENTSECRET"))
            });
            HttpResponseMessage response;
            using (HttpClient client = new HttpClient())
            {
                response = client.PostAsync(LoginUrl, content).Result;
            }

            Console.WriteLine(response.Content.ReadAsStringAsync().Result);
            Console.WriteLine(response.StatusCode);

            Console.ReadLine();
        }
    }
}

Hinweis Dies ist eine von vielen Implementierungen, die wir versucht haben, einschließlich der Verwendung von HttpWebRequest und WebClient, die alle zum gleichen Ergebnis führen.

Zusätzlich zu unserem eigenen Code haben wir versucht, Code aus dem GitHub-Repository developerforce / Force.com-Toolkit-for-NET abzurufen, das ebenfalls das gleiche Problem aufwies.

Bis jetzt sind wir zwei Tage in der Fehlersuche und haben unseren SalesForce-Berater verblüfft, warum es nicht funktioniert. Wir haben heute Nachmittag versucht, das Sicherheitstoken ohne Erfolg zurückzusetzen. Ich habe eine Reihe von Online-Artikeln durchgesehen (einschließlich StackOverflow), von denen die meisten auf die folgenden Probleme hinweisen:

Ungültige Anmeldeinformationen - Wir verwenden in Postman erfolgreich dieselben Anmeldeinformationen wie in unseren C # -Anwendungen. Wir haben versucht, sie von der SalesForce-Benutzeroberfläche erneut zu kopieren und einzufügen, und wir haben versucht, sie manuell in unseren Code einzugeben für den Fall, dass wir unsichtbare Zeichen auffangen würden. (Nach Anmeldeinformationen schließe ich Benutzername, Kennwort, client_id und Clientgeheimnis ein.)Schlecht oder fehlende Content-Type-Kopfzeile - wir senden definitiv "application / x-www-form-urlencoded", das ich mehrmals in jeder Anwendung überprüft habe (und beschnüffelt habe, um zu überprüfen, ob sie tatsächlich gesendet wurde).Uncoded Parameters - Ich habe dies in einer Reihe von StackOverflow-Threads gesehen und überprüft, dass wir die Parameter codieren, die wir senden, und den Anforderungshauptteil.

Es scheint, dass Postman etwas tut, das wir nicht in unseren Anfragen haben, aber ich kann nicht genau sagen, was es ist. Wir haben sogar Anfragen sowohl von Postman als auch von einem unserer Kunden erfasst und unterschieden, und sie kamen als identisch zurück.

Jede Hilfe wäre sehr dankbar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage