2016-11-14 4 views
0

Ich mache eine Integration mit der salesforce.com API, aber ich habe einen Roadblock getroffen.Salesforce.com REST-Authentifizierung CORS Problem

einige mit JavaScript Ich möchte 1. Post ein Benutzername/Passwort-Authentifizierungstoken EG erhalten: https://login.salesforce.com/services/oauth2/token?&client_id=XXX-XXX&client_secret=YYYYYY&grant_type=password&password=BLAHBLAHP&[email protected] 2. Verwenden Sie dieses Token subsequest Anfragen an den Salesforce-API zu machen.

Wenn ich die obige Anfrage mache, funktioniert es gut, solange ich die Sicherheit des Browsers deaktiviere oder ein Addon habe, das einen "Access-Control-Allow-Origin" -Wert zum responsed Header hinzufügt. In diesem Fall erhalte ich eine gültige Antwort von Salesforce.

Das Problem ist, dass ich CORS-Fehler bekomme, wenn ich dies aus meiner Domäne versuche: Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Origin 'https: // {{myip}}' ist daher nicht erlaubt.

Jetzt verstehe ich, warum diese Einschränkung vom Browser erzwungen wird, aber die Salesforce-API hat eine Option, Domains auf der weißen Liste hinzuzufügen. Ich hätte gedacht, dass dies mir erlaubt hätte, diese Arbeit zu machen, aber das tut es nicht. Obwohl ich meine Domain zur Whitelist hinzugefügt habe, kommt die Authentifizierungsanfrage immer mit dem letzten Fehler in der Konsole des Browsers (Chrome) zurück.

Meine Frage ist: Ich irre mich zu denken, dass das Whitelisting in meinem Szenario funktionieren sollte? Fehle ich eine Konfiguration der Salesforce-App? Muss ich einer anderen Authentifizierungsmethode folgen, damit dies funktioniert?

Jede Anleitung wäre willkommen.

Antwort

1

Die Salesforce-REST-API unterstützt CORS noch nicht auf allen Anforderungsendpunkten. Vielleicht verwenden Sie also einen Endpunkt, der keine CORS-Header hinzufügt? In der Zwischenzeit können Sie einen Proxy verwenden: https://www.jamesward.com/2014/06/23/cross-origin-resource-sharing-cors-for-salesforce-com

+0

Dank James, ich habe bereits einen Proxy-Server implementiert, der die Kors Header löscht. Das funktioniert gut, aber ich möchte mich nicht darauf verlassen. Ich denke, meine Frage ist jedoch: Gibt es eine Möglichkeit, die Login-Methode, die ich oben vorgeschlagen habe, zu verwenden und nicht das CORS-Problem, das ich habe? – kSeudo

+1

Ich glaube nicht, dass die Login-Methoden CORS unterstützen. Sie müssen also den User-Agent-OAuth-Flow verwenden: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_understanding_user_agent_oauth_flow.htm Und es gibt keine Möglichkeit, dass der Browser Sie lässt Holen Sie sich den Rumpf einer domänenübergreifenden Anfrage ohne den CORS-Header. Wenn Sie dies über JavaScript im Browser tun möchten, benötigen Sie die CORS-Header. –