Flusso OAuth 2 per imgur nel plugin Discourse

Ciao,

Sto sviluppando un plugin molto specifico per la nostra istanza di Discourse e avrei alcune domande.

A un certo punto, il plugin dovrà inviare una raccolta delle immagini dei topic di Discourse a Imgur. La parte che raccoglie queste immagini è già pronta.

Ora sto cercando di autenticarmi sull’API di Imgur utilizzando il loro flusso OAuth2. Ho già creato un’interfaccia di amministrazione per il plugin che permette di premere un pulsante per autorizzare il plugin sul proprio account Imgur. Una volta che l’utente effettua il login, viene chiamato un URL di callback (configurato come la mia istanza di Discourse e una rotta specifica che ho creato nel plugin) con il token di accesso (vedi esempio).

http://localhost:3000/admin/plugins/plugin_name/callback#access_token=<token>&...

La mia domanda è: come posso recuperare questo token? Non ho idea da dove iniziare.

La mia comprensione è che, poiché il token viene restituito come parametro nell’hash, l’operazione deve essere eseguita lato JS. Ho provato a impostare un controller e una rotta per il mio URL di callback, ma non riesco a capire come leggere l’URL (e in particolare la parte hash) da lì. (Non ho trovato nulla di utile nella documentazione di Ember.js o su StackOverflow). Ho anche provato a impostare diversi listener di eventi, ma sembrano non essere mai attivati.

La mia seconda domanda è: dove dovrei memorizzare il token e il token di aggiornamento? Posso salvarlo come impostazione di sistema dal plugin? Ho sentito parlare di PluginStore, ma è accessibile solo in Ruby (il che significherebbe creare un endpoint per il client per inviare questi token al server). Inoltre, è sicuro dal punto di vista della sicurezza?

Grazie!

Modifica: Avevo un errore di battitura nel nome del file della mia rotta, mancava una ‘s’, ecco perché nulla veniva attivato…

Non potrai raggiungere questo risultato tramite HTTP su localhost. Si consiglia di andare a bisogno simulare HTTPS con uno strumento come https://ngrok.com/ o eseguire il tuo server di sviluppo nel cloud in modalità HTTPS con un dominio.

Pensavo che mi servisse anche quello, ma vengo reindirizzato correttamente al mio URL locale e vedo il token nell’URL.

Sì, hai ragione, il client può usare HTTP. Il problema è che le richieste possono essere intercettate e i token letti, quindi non avrebbe senso usare OAuth2 fin dall’inizio :). Personalmente, mi sentirei più a mio agio lavorando con il protocollo finale completo in ambiente di sviluppo, così da sapere che il mio codice funziona.

Sì, sono d’accordo, al momento era solo a scopo di sviluppo. Naturalmente, in produzione userei https :slight_smile: