API-Schlüssel ausblenden

Ich möchte an verschiedenen Stellen Aufrufe an die JSON-API tätigen. Manchmal muss ich einen API-Schlüssel bereitstellen – also generiere ich einen im Admin-Dashboard und muss ihn in den API-Aufruf einfügen. Zum Beispiel:

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);
         }
})

Gibt es eine Möglichkeit, diesen Schlüssel so zu schützen, dass er für Benutzer nicht sichtbar ist?

Derzeit besteht meine Lösung darin, diese Funktion außerhalb meiner Discourse-Anwendung auszuführen – meine Anwendung ruft also einen Endpunkt auf, der woanders gehostet wird und diese Funktion dann aufruft. Auf diese Weise befindet sich der API-Schlüssel in einer Funktion, die separat von meiner Discourse-Anwendung gespeichert ist, und meine Anwendung kennt nur den Endpunkt.

ABER, es wäre sauberer, wenn ich diese Funktion innerhalb meiner Discourse-Anwendung einbinden könnte, zum Beispiel in einem Theme oder Plugin. Doch es scheint mir, dass ein Benutzer den API-Schlüssel sehen kann, egal was ich tue, solange er Teil des Codes ist.

Gibt es eine Möglichkeit, den API-Schlüssel zu verstecken?

Eine App, die sensible API-Anfragen jeglicher Art durchführt, sollte diese im Backend und nicht im Frontend ausführen.

Dadurch erhält man zahlreiche Vorteile wie benutzerdefiniertes Caching, parallele API-Aufrufe, Sicherheit usw. Es ist keine gute Idee, dies in JS-Code zu tun, der auf dem Client ausgeführt wird.

Danke. Ich habe eine Backend-Struktur eingerichtet, um die API-Anfrage zu verarbeiten, diese ist jedoch von meiner Discourse-Instanz getrennt (gar nicht mit Discourse verbunden). Gibt es eine Möglichkeit, dies direkt im Backend der Discourse-App selbst abzuwickeln?

Ich nehme an, das hängt davon ab, wie und wo Ihre Discourse-Instanz gehostet wird. Wäre es möglich, das Backend für eine bei discourse.org gehostete App zu verknüpfen?

Sie müssen es als Plugin in Rails entwickeln und einen Tarif haben, der die Hinzufügung von Plugins von Drittanbietern erlaubt.