It is currently 3 August 2020, 11:32 Advanced search

autenticazione tramite OAuth2.0,

Domande e risposte su come utilizzare Instant Developer Cloud al meglio

autenticazione tramite OAuth2.0,

Postby rainer.battisti » 7 July 2020, 8:54

Stiamo provando a realizzare un'applicazione che sfrutti il funzionamento di DialogFlow, un servizio di Google, componendo richieste REST e gestendo le risposte.
Per accedere alle API di Google è necessaria un'autenticazione tramite OAuth2.0, per la quale esiste una procedura per comporre la richiesta del token da utilizzare per autenticare le successive chiamate.

Uno dei passaggi consiste nel "firmare" le strutture realizzate fino a quel punto tramite l'algoritmo "SHA256withRSA", che dovrebbe prima calcolare un hash tramite SHA256 e poi cifrarlo tramite RSA (con una chiave privata fornita dalla Console di Google).
Provando la sequenza di operazioni tramite le funzioni di INDE (Crypt.computeHash e Crypt.publicEncrypt, che appunto utilizzano gli stessi algoritmi richesti dalla procedura) si ottiene l'errore "invalid_grant - Invalid JWT Signature", dovuto alla realizzazione sbagliata della "firma".
Lo stesso procedimento ha invece successo utilizzando un WS esterno in php, dove le apposite funzioni permettono di calcolare la "firma" in modo corretto.

Confrontando però le due codifiche abbiamo notato che l'hash di Crypt.computeHash e quello prodotto in php sono differenti (nonostante entrambi generati a partire dallo stesso testo in chiaro attraverso SHA256).
C'è una maniera di "modificare" il procedimento del calcolo dell'hash per ottenere un risultato funzionante?
Grazie
rainer.battisti
 
Posts: 120
Joined: 23 June 2015, 10:18

Re: autenticazione tramite OAuth2.0,

Postby d.termini » 7 July 2020, 9:04

Penso sia necessario usare node crypto a basso livello. (qui hai la documentazione https://nodejs.org/api/crypto.html )
Però anche a me, pur usandolo così, non restituisce la stringa uguale agli altri sistemi che devono decodificarla. Prova anche tu, magari sarai più fortunato.
Code: Select all
const crypto = (module ? require("crypto") : window.crypto);
const cipher = crypto.createCipheriv("codifica", "key", "iv");
//cipher.setAutoPadding(false);
let result = cipher.update(src).toString('base64');
result += cipher.final().toString('base64');
return result;
d.termini
 
Posts: 813
Joined: 13 November 2017, 8:41

Re: autenticazione tramite OAuth2.0,

Postby rainer.battisti » 7 July 2020, 12:24

Grazie mille per il consiglio!
C'è comunque un problema, usando il comando window.crypto viene restituito sulla console l'errore a runtime "window is not defined nel FirstApp.onStart alla riga 27".
C'è per caso qualche componente particolare da importare o specificare in INDE Cloud per farlo funzionare correttamente ed evitare questo errore?
rainer.battisti
 
Posts: 120
Joined: 23 June 2015, 10:18

Re: autenticazione tramite OAuth2.0,

Postby d.termini » 7 July 2020, 13:57

Non dovrebbe, crypto è uno dei componenti già presenti.
L'hai copiato esattamente così? Questo l'ho visto in assistenza (viewtopic.php?f=10&t=88694) e mi funziona.
d.termini
 
Posts: 813
Joined: 13 November 2017, 8:41


Return to Tips & Tricks - Cloud

Who is online

Users browsing this forum: No registered users and 3 guests