Nascondere la chiave API

Vorrei effettuare chiamate all’API JSON in vari punti. A volte, devo fornire una chiave API: quindi ne genero una dalla dashboard di amministrazione e devo includerla nella chiamata API. Ad esempio:

var token = [API KEY]
$.ajax({
     url: 'https://myforum.com/groups/[groupname].json',
      contentType: "application/json",
      headers: {
          "Api-Key": token,
          "Api-Username": "[username]"
        },
        dataType: 'json',
        success: function(result){
             console.log('result = ' + result);
         }
})

Esiste un modo per proteggere questa chiave in modo che non sia visibile agli utenti?

Al momento, la mia soluzione è far sì che questa funzione venga eseguita al di fuori della mia applicazione Discourse: quindi la mia applicazione chiamerebbe un endpoint ospitato altrove, che a sua volta eseguirebbe questa funzione. In questo modo, la chiave API si trova in una funzione memorizzata separatamente dalla mia applicazione Discourse, e la mia applicazione conosce solo l’endpoint.

MA, sarebbe più elegante se potessi includere questa funzione all’interno della mia applicazione Discourse, ad esempio in un tema o in un plugin. Ma sembra che, in ogni caso, se fa parte del codice, un utente possa visualizzare la chiave API.

Esiste un modo per nascondere la chiave API?

Un’app che esegue richieste API di qualsiasi tipo sensibile vorrà farlo nel backend, invece che nel frontend.

Otterrai molti vantaggi, come la cache personalizzata, le chiamate API parallele, la sicurezza, ecc. Non è una buona idea farlo in codice JS in esecuzione sul client.

4 Mi Piace

Grazie. Ho configurato una struttura backend per gestire la richiesta API, ma è separata dalla mia istanza Discourse (non è collegata a Discourse in alcun modo). C’è un modo per far sì che ciò avvenga nel backend dell’applicazione Discourse stessa?

Immagino che dipenda da come e dove è ospitata la tua istanza Discourse. Esisterebbe un modo per collegarsi al backend per un’app ospitata con discourse.org?

È necessario svilupparlo in Rails come plugin e essere abbonati a un piano che consenta l’aggiunta di plugin di terze parti.

2 Mi Piace