Autenticazione Salesforce non riuscita

Sto cercando di utilizzare l’autenticazione OAuth per ottenere il token di autenticazione Salesforce, quindi ho fatto riferimento ai documenti wiki , ma dopo aver ottenuto il codice di authorization, quando faccio una richiesta di post con 5 parametri richiesti, ricevo l’eccezione seguente

{"error":"invalid_grant","error_description":"authentication failure"} CODE 400 JSON = {"error":"invalid_grant","error_description":"authentication failure"} 

quale è indovinare una richiesta difettosa.

 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()); 

Rispondi gentilmente, se l’eccezione è nota?

Per chiunque sia bloccato e frustrato come me, ho lasciato un post sul blog dettagliato sull’intero processo (con immagini e commenti scarsi!). Fai clic sul link se lo desideri:

http://www.calvinfroedge.com/salesforce-how-to-generate-api-credentials/

Ecco una risposta solo testo:

Passo 1:

Crea un account. È ansible creare un account sviluppatore (gratuito) presso developer.salesforce.com


Passo 2:

Ignora tutte le pagine di destinazione e inizia a schifo. È un ciclo infinito di marketing.


Passaggio 3:

Fai clic sul link “Configurazione”


Passaggio 4:

Nella barra degli strumenti a sinistra, sotto “Crea”, fai clic su “App”


Passaggio 5:

Sotto “App collegate” fai clic su “Nuovo”


Passaggio 6:

Compilare il modulo. I campi importanti sono quelli contrassegnati come richiesto e la sezione oauth. Nota che puoi lasciare qualsiasi url per la tua richiamata (ho usato localhost).


Step 7:

Tieni presente che Salesforce ha una disponibilità scadente.


Passaggio 8:

Premere continua. Finalmente hai la tua chiave (id cliente) e segreta (segreto del cliente).


Passaggio 9:

Ma aspetta! Non hai ancora finito.

  1. Assicurati che l’ IP relaxation sia impostato su Relax IP restric ,

  2. e assicurarsi che gli Utenti consentiti siano impostati su “Tutti gli utenti possono autorizzarsi autonomamente.”,

  3. e inoltre assicurarsi che la sicurezza> Accesso alla rete> Intervalli IP sicuri sia stata impostata

Impostazioni OAuth

Sicurezza/> Accesso alla rete> Intervalli IP affidabili”> </p>
<p>  Se sei preoccupato di disabilitare la sicurezza, non essere per ora, vuoi solo farlo funzionare per ora in modo da poter effettuare chiamate API.  Stringa i permessi una volta che hai tutto funzionante, uno alla volta, in modo da poter capire quale impostazione ti dà errori di autenticazione. </p>
<hr />
<p>  Passaggio 10: </p>
<p>  Celebrare!  Questa chiamata al ricciolo dovrebbe riuscire: </p>
<p>  sulla <em>produzione</em> : </p>
<pre> <code>curl -v https://login.salesforce.com/services/oauth2/token \ -d

su sandbox o 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]" 

Gli appunti:

  • Non si dovrebbe fare l’authorization della password se si sta costruendo un’app multi-tenant, in cui gli utenti devono autorizzare la propria applicazione. Usa il stream di lavoro Oauth2 per quello.

  • Potrebbe essere necessario passare il token di sicurezza aggiunto alla tua password.

Abbiamo avuto anche questo problema.

Verifica le impostazioni dell'app Connected – sotto Selected OAuth Scopes , potresti dover regolare le autorizzazioni selezionate. La nostra app utilizza principalmente Chatter , quindi abbiamo dovuto aggiungere entrambi:

  • Accedi e gestisci il tuo feed Chatter ( chatter_api )
  • Esegui richieste per tuo conto in qualsiasi momento ( refresh_token ).

Anche in questo caso, il tuo chilometraggio può variare, ma provare diverse combinazioni di autorizzazioni in base a ciò che l’applicazione fa / ha bisogno.

Inoltre, l’effettivo errore invalid_grant sembra verificarsi a causa di restrizioni IP . Assicurarsi che l’indirizzo IP del server che esegue il codice di autenticazione OAuth sia consentito. Ho scoperto che se l’ambiente SFDC ha l’impostazione di restrizione IP Applica le restrizioni IP impostate ( Impostazioni -> Amministratore -> Gestisci app -> App connesse ), quindi ogni profilo utente deve avere anche gli indirizzi IP consentiti.

Salesforce richiede un aggiornamento a TLS 1.1 o superiore entro il 22 luglio 2017 per allinearsi alle best practice del settore per la sicurezza e l’integrità dei dati: da help.salesforce.com .

prova ad aggiungere questo codice:

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

Un’altra opzione è modificare il tuo registro:

 [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 

Controlla questo link per ottenere risposte più dettagliate: SecurityProtocol predefinito in .NET 4.5

Per autorizzare un intervallo di indirizzi IP, attenersi alla seguente procedura:

  1. Fai clic su Setup in alto a destra
  2. Seleziona Administer > Security Controls > Network Access dalla barra di navigazione a sinistra
  3. Fai clic su New
  4. Aggiungi il tuo intervallo di indirizzi IP
  5. Fai Save su Save

TL: DR

Per i token OAuth 2 se effettui il login …

Storia:

  1. Stavo seguendo Salesforce “Configurare OAuth 2.0”
  2. Le credenziali erano corrette (molti caratteri per i controlli dei caratteri)
  3. Quando chiamerei curl https://login.salesforce.com/services/oauth2/token -d "...credentials..." non ha ancora funzionato:

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

Soluzione:

Realizzato ci sono diversi ambienti OAuth durante la lettura di Digging Deeper in OAuth 2.0 in Salesforce in particolare (enfasi aggiunta):

Endpoint di autenticazione OAuth 2.0

Gli endpoint OAuth sono gli URL utilizzati per effettuare le richieste di autenticazione OAuth a Salesforce. Quando l’applicazione effettua una richiesta di autenticazione, assicurarsi di utilizzare l’endpoint OAuth Salesforce corretto. Gli endpoint primari sono:

Invece di login.salesforce.com , i clienti possono anche utilizzare i domini My Domain , community o test.salesforce.com (sandbox) in questi endpoint.

fissare

Poiché ho effettuato l’accesso al mio ambiente tramite test.salesforce.com passando a curl https://test.salesforce.com/services/oauth2/token -d "...credentials..." generato un “Complimenti! (> ^ _ ^)> Fornisci risposta token OAuth “

Sostituisci la password di Salesforce con la combinazione della password e del token di sicurezza. Ad esempio, se la password è “MyPassword” e il token di sicurezza è “XXXXXX”, è necessario inserire “MyPasswordXXXXXX” nel campo della password.

Se non si dispone del token di sicurezza, è ansible reimpostarlo come indicato di seguito.

  • Vai a Il tuo nome -> Le mie impostazioni -> Personale -> Reimposta il mio token di sicurezza.

Sto usando Salesforce soap API con il seguente formato di richiesta

     client_id sf     username password+security_token    

Ho eseguito correttamente l’accesso ma l’applicazione non viene visualizzata come configurazione. Quando ho provato con questo metodo, funzionava.

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]

Qualcuno può dirmi cosa sto facendo di sbagliato o API di soap Salesforce non supportano questo?