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.
Assicurati che l’ IP relaxation sia impostato su Relax IP restric ,
e assicurarsi che gli Utenti consentiti siano impostati su “Tutti gli utenti possono autorizzarsi autonomamente.”,
e inoltre assicurarsi che la sicurezza> Accesso alla rete> Intervalli IP sicuri sia stata impostata
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:
chatter_api
) 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:
Setup
in alto a destra Administer
> Security Controls
> Network Access
dalla barra di navigazione a sinistra New
Save
su Save
Per i token OAuth 2 se effettui il login …
login.salesforce.com
utilizza https://login.salesforce.com/services/oauth2/token test.salesforce.com
utilizzare https://test.salesforce.com/services/oauth2/token Quando chiamerei curl https://login.salesforce.com/services/oauth2/token -d "...credentials..."
non ha ancora funzionato:
{"error":"invalid_grant","error_description":"authentication failure"}
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:
- Autorizzazione- https://login.salesforce.com/services/oauth2/authorize
- Tokenhttps://login.salesforce.com/services/oauth2/token
- Revoke- https://login.salesforce.com/services/oauth2/revoke (consultare Revocare i token OAuth per dettagli sulla revoca dell’accesso)
Invece di login.salesforce.com , i clienti possono anche utilizzare i domini My Domain , community o test.salesforce.com (sandbox) in questi endpoint.
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.
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?