Chiavi API per utente non funzionanti

Sto seguendo le linee guida per ottenere chiavi API per utente: User API keys specification.

Ho completato i passaggi: il client genera una coppia di chiavi pubblica/privata e un URL di ritorno, passa a una rotta di Discourse, l’utente concede l’autorizzazione a Discourse per utilizzare l’app e Discourse genera una chiave API.

Tuttavia, quando Discourse restituisce la chiave API come “payload” nell’URL di ritorno, quella chiave non funziona. Provo a decifrarla, ma non ci riesco.

Inserisco quella chiave in una decrittazione JavaScript standard (come nella risposta qui) e ricevo un errore “length is invalid” (o DATA_LEN_NOT_EQUAL_TO_MOD_LEN, a seconda del metodo di decrittazione JavaScript che sto utilizzando).

Avete qualche idea su come risolvere?

Questa è una funzionalità cruciale, quindi qualsiasi aiuto è davvero apprezzato.

Devo modificare in qualche modo la chiave fornita nel payload? È possibile che la chiave fornita nel payload non funzioni?


Un po’ più di dettagli:

Penso che il mio metodo generale sia corretto, perché Discourse offre un altro metodo per ottenere una chiave per utente e riesco a decifrare quella chiave:

Se ometto l’URL di reindirizzamento nella richiesta a Discourse, Discourse non esegue il reindirizzamento. Invece, stampa una chiave sullo schermo per l’utente da copiare.

Quella chiave è più corta della chiave fornita in un “payload” (ha circa 684 caratteri, mentre la chiave nel payload ne ha circa 762). E quella chiave funziona: riesco a decifrarla senza problemi usando JavaScript.

Ma chiedere all’utente di copiare e incollare una chiave API è confuso per gli utenti: il flusso corretto consiste nell’ottenere la chiave dal payload. Come faccio a far funzionare quella chiave del payload?

Hai qualche idea per questo? Come posso far funzionare la chiave API fornita nel payload?

Ce l’ho fatta a farlo funzionare. @RGJ ha gentilmente segnalato quanto segue:

Quando Discourse esegue il reindirizzamento e invia la chiave API da decodificare come payload nell’URL di reindirizzamento, tale chiave viene sottoposta a codifica URL. Quindi, per ottenere la chiave API effettiva, è necessario eseguire la decodifica URL sul payload. Il risultato è la chiave API che funziona correttamente (che corrisponde alla lunghezza della chiave che Discourse visualizza sullo schermo).

Ho fornito qui i passaggi che ho seguito per far funzionare tutto: