Ich habe eine Frage zur Sicherheit der API-Nutzung, da ich aufgrund meiner mangelnden Erfahrung ein triviales Konzept zu übersehen scheine.
Ich habe eine Headless-Implementierung von Discourse zur Integration in mein Frontend und habe SSO für die Benutzerauthentifizierung erfolgreich aktiviert.
Mein ursprüngliches Verständnis war, dass ich SSO zur Authentifizierung als “activeUser” verwende, um activeUser-spezifische Daten von der API abzurufen. Ich sehe jetzt, dass das nicht ganz richtig ist.
Ich sehe jetzt, dass die zurückgegebenen Daten vom ‘api-username’ im Header abhängen. Aber ich verwende einen Admin-API-Schlüssel, was meiner Meinung nach bedeutet, dass ich die Daten jedes Benutzers abrufen kann, indem ich den richtigen Benutzernamen für “api-username” angebe.
Meine Frage läuft also darauf hinaus: Es scheint, dass die API kein Konzept von “activeUser” einführt und ich den aktiven Benutzer anpassen muss, indem ich den Benutzernamen über die externe ID abrufe und diesen dann während der aktiven Sitzung als api-username verwende, ist das richtig?
Wenn mein Verständnis korrekt ist, ist es dann nicht einfach für einen Hacker, den api-username im Header zu ändern, um Chat-Diskussionen für jeden Benutzer abzurufen?
Jede zusätzliche Information wäre hilfreich, um mir zu helfen, das zu verstehen. Danke!
Sie sollten diese API niemals von einem Frontend aus verwenden, da dies tatsächlich ein Risiko darstellt (eigentlich ist das Risiko viel höher, da der Hacker alles tun kann).
Sie sollten dies vom Backend aus tun.
Wenn dies keine Option ist, sollten Sie stattdessen User API-Schlüssel verwenden.
Als Headless-Implementierung werde ich dies von meinem Frontend aus ausführen. In diesem Fall scheint es, dass ich etwas Zeit damit verbringen muss, die Diskussion zu diesem Thema zu entschlüsseln:\n\nhttps://meta.discourse.org/t/user-api-keys-specification/48536\n\nÄhnlich wie bei diesen Diskussionen wäre ich daran interessiert, den API-Schlüssel des Benutzers mithilfe meines Admin-API-Zugangs automatisch zu generieren. In meinem Flow möchte ich jedoch nicht, dass der Benutzer zu einer neuen Seite weitergeleitet wird, um meine App zu „genehmigen“. Ich möchte entweder die Genehmigung mit meinem bewährten Admin-API-Schlüssel erzwingen, oder gibt es eine Einstellung, die ich deaktivieren kann, sodass für den neuen API-Schlüssel, den ich generiere, keine zusätzliche Authentifizierung erforderlich ist?