It is currently 7 June 2025, 22:50 Advanced search

Richiesta bearer token

Domande e risposte su come utilizzare Instant Developer Cloud al meglio

Richiesta bearer token

Postby AngeloSantospago » 31 August 2023, 15:51

Salve a tutti.
Per effettuare una richiesta di bearer token, come devo impostare il grant_type?
Mi ritorna sempre "chiamata non valida".
Ecco il mio codice: secondo voi è corretto?
Grazie a tutti!!!

{
let endpoint = "https://identity.ecocerved.it/connect/token";
let userId = "xxx@ecocamere";
let clientSecret = "xxx";
//
//
let headers = {
authorization : "Basic " + App.Utils.toBase64(app, t("@user:@pass", {
user : userId,
pass : clientSecret
}))
};
let body = {
grant_type : "client_credentials"
};
//
//
let u = app.fs.url(endpoint);
let ris = yield u.post({
headers : headers,
body : body
});
//
//
if (ris.status === 200) {
app.alert("Richiesta OK!");
} else {
let parsed = JSON.parse(ris.body);
let error = parsed.error || "";
app.alert(error);
}
};
AngeloSantospago
 
Posts: 21
Joined: 14 July 2023, 14:45

Re: Richiesta bearer token

Postby majinbu » 1 September 2023, 8:41

Ma è richiesto che nel body tu gli passi il grant type? se si sarebbe necessario vedere le specifiche della API che vuoi 'consumare'.
Detto ciò io di solito quando authentico con bearer semplicemente passo nell'header una roba così:

headers.Authorization = "Bearer " + access_token;

Altra cosa se devi passare informazioni nel body è bene anche sapere come è il formato del body che glielo si passa sempre nell'header con la chiave: Content-Type


Diciamo che per essere più precisi servirebbe sapere esattamente l'errore che ti viene ritornato e vedere la documentazione della API.
Suggerimenti fai sempre dei test preliminari con applicazioni tipo Postman, quando riesci a simulare il processo li poi lo riproduci nel codice...almeno io faccio così


Ciao
majinbu
 
Posts: 34
Joined: 4 June 2020, 8:15

Re: Richiesta bearer token

Postby AngeloSantospago » 1 September 2023, 8:57

Ciao majinbu, ti ringrazio per la risposta.
Sulle specifiche non c'è scritto molto, soltanto che il "grand_type" deve essere "client_credentials".
In verità, ho già sviluppato un'applicazione con WinDev che si integra perfettamente con le API di VI.VI.FIR.
Poiché da poco abbiamo intrapreso questo percorso con InDe, ed avendo fatto i corsi sulle WebAPI, mi è venuta la curiosità di provarlo.
E cominciamo subito il primo intoppo con il bearer token.
Nell'applicazione in WinDev, comunque, il "grand_type" lo indico così:
RichiestaHTTP.Content = "grant_type=client_credentials"
dove "Content" pare sia di tipo buffer (qui la documentazione dell'istruzione con il parametro "Content": https://help.windev.com/?1000021158&product=WD).
AngeloSantospago
 
Posts: 21
Joined: 14 July 2023, 14:45

Re: Richiesta bearer token

Postby majinbu » 1 September 2023, 9:35

Guarda dalla documentazione che hai postato sembra che il body possa avere type vari.
Io in una cosa simile lo passo così:

var rOpt = {headers : {'Content-Type' : "application/json"}, body : body};
rOpt.headers.Authorization = "Bearer " + k;//forse da te è "Basic "+k;
var res = yield u.post(rOpt);

in questo caso allora Body.grant_type = 'client_credentials'; perchè è un json (quindi come lo hai scritto nel tuo esempio di codice)

se invece vuoi passare Body = 'grant_type=client_credentials'; (non è json ma una stringa) il content type dovresti mettero 'application/x-www-form-urlencoded' perchè lui si aspetta una stringa fatta come un uri ovvero 'grant_type=client_credentials&altroparametro=pippo' .

Spero ti sia utile.
Ciao
majinbu
 
Posts: 34
Joined: 4 June 2020, 8:15

Re: Richiesta bearer token

Postby AngeloSantospago » 1 September 2023, 10:07

FUNZIONAAAAA!!!!

Ti ringrazio davvero tanto!!
Ho provato entrambi i body: sia JSON, sia stringa.
Quello che funziona è il tipo stringa.
Riporto il codice della chiamata.
Ti ringrazio ancora tantissimo per il tuo aiuto!!!!

let headers = {
"Content-Type" : "application/x-www-form-urlencoded",
Authorization : "Basic " + App.Utils.toBase64(app, t("@user:@pass", {
user : userId,
pass : clientSecret
}))
};
let body = "grant_type=client_credentials";
//
let optReq = {
headers : headers,
body : body
};
//
//
let u = app.fs.url(endpoint);
let ris = yield u.post(optReq);
AngeloSantospago
 
Posts: 21
Joined: 14 July 2023, 14:45

Re: Richiesta bearer token

Postby AngeloSantospago » 1 September 2023, 11:26

Ciao!
Ovviamente sono andato avanti e, con il bearer token, ho eseguito una semplicissima chiamata per ottenere l'elenco delle deleghe in ambiente demo.
Lo status è 200 ed, infatti, nel body c'è tutto l'occorrente.
Ho eseguito il parse del body ma non riesco a "raggiungere" i vari elementi.
Ti condivido lo screenshot: come vedi, il "parsed" è un oggetto, con le varie proprietà ritornate dall'API.
Perché non riesco ad "agganciarle"?
Il console.log mi ritorno undefined.
Ti ringrazio ancora!!!

https://drive.google.com/file/d/1TRfnfItek9ldl4y5MfQMhsBbJLs_QZMR/view?usp=drive_link
AngeloSantospago
 
Posts: 21
Joined: 14 July 2023, 14:45

Re: Richiesta bearer token

Postby majinbu » 1 September 2023, 11:42

Ciao,
felicissimo che funzioni, le schermate non le vedo ma ti ho richiesto l'accesso quando posso gli darò un'occhiata.
Durante gli ultimi mesi ho scritto diverso codice con consumo di rest api mi sono fatto una certa cultura a riguardo ;)
majinbu
 
Posts: 34
Joined: 4 June 2020, 8:15

Re: Richiesta bearer token

Postby AngeloSantospago » 1 September 2023, 13:34

majinbu wrote:Ciao,
felicissimo che funzioni, le schermate non le vedo ma ti ho richiesto l'accesso quando posso gli darò un'occhiata.
Durante gli ultimi mesi ho scritto diverso codice con consumo di rest api mi sono fatto una certa cultura a riguardo ;)

Benissimo!!!
Spero tanto tu voglia condividere tutta questa esperienza ;)

Scusami per il ritardo: avevo dimenticato che Google Drive mi avrebbe richiesto il tuo accesso.
Per curiosità, siccome sono nuovo sia a questo forum, sia a questo tipo di programmazione, come posso postare immagini direttamente nelle risposte?
Avete, voi utenti, un server dove caricare le immagini senza poi richiedere ogni volta l'accesso?

Grazie ancora per tutto il tuo (davvero) preziosissimo aiuto: oggi pomeriggio, se riesco ad accedere alle proprietà del body, mi vanterò con il mio titolare di aver raggiunto anche questo obiettivo ;)))
AngeloSantospago
 
Posts: 21
Joined: 14 July 2023, 14:45

Re: Richiesta bearer token

Postby majinbu » 1 September 2023, 13:59

Dall'immagine che mi hai inviato a me pare che la variabile parsed sia un array di oggetti per cui parsed.profilo è undifined, invece probabilmente parsed[0].profilo dovrebbe essere valorizzato.
Riguardo alla domanda delle immagini non sono sicuro di saperti rispondere correttamente, magari aspetta che ti risponda qualcuno dei ragazzi di progamma.. cmq io ti ho allegato uno screenshot a questa risposta usando la tab 'invia allegato' in basso nel messaggio (prima volta che lo faccio lol)

Ciao ;)
Attachments
2023-09-01_155728.png
2023-09-01_155728.png (91.65 KiB) Viewed 1840 times
majinbu
 
Posts: 34
Joined: 4 June 2020, 8:15

Re: Richiesta bearer token

Postby AngeloSantospago » 1 September 2023, 14:16

Che giornata, ragazzi!!!
Mi sembro un bimbo davanti ai regali di Natale!!!
Per l'array, a dirla tutta, pareva anche a me che lo fosse, ma si vede che avevo sbagliato la sintassi (mi sarà scappato forse il punto), perché, come mi hai suggerito tu, FUNZIONAAAAA.
Per il server delle immagini, se funziona la faccenda dell'allegato, non servirà più.
Grazie ancora per il tuo aiuto!!!
Spero di non doverti disturbare ancora!
Intanto, adesso, mi preparo una bella schermatina per farmi il bello con il mio capo ;)))

Grazie ancora! Davvero!!!
AngeloSantospago
 
Posts: 21
Joined: 14 July 2023, 14:45

Next

Return to Tips & Tricks - Cloud

Who is online

Users browsing this forum: No registered users and 3 guests