Ich verwende Discourse headless und kann Benutzerinformationen mit dem Admin API-Schlüssel abrufen. Es wurde jedoch empfohlen, stattdessen einen Benutzer-API-Schlüssel für jeden Benutzer zu generieren. Ich versuche also, diese Methode stattdessen zu verwenden, aber ich möchte nicht, dass der Benutzer zu einer neuen Benutzeroberfläche navigieren muss, um die API zu “genehmigen”, die ich für ihn erstelle.
Meine Lösung ist also, die Bestätigung programmatisch zu übermitteln. Von einer GET-Anfrage an ‘/user-api-key/new’ kann ich die Daten des ‘form’-Elements extrahieren, aber ich kann keine POST-Anfrage an ‘/user-api-key/’ senden, da ich einen CSRF-Fehler erhalte.
Ich habe den CSRF-Schutz für Discourse Connect deaktiviert, aber gibt es einen anderen für API-Schlüssel?
SiteSetting.discourse_connect_csrf_protection
Wenn nicht, werde ich die Benutzer-API-Schlüssel nicht verwenden, bis ich sie ohne UI-Unterbrechung erstellen kann.
Vielen Dank im Voraus!
Anscheinend gab es in früheren Versionen eine Lösung, die funktionieren könnte, aber ich sehe keine aktualisierte Version davon:
Vielleicht bauen wir das Gleiche obwohl meines nur teilweise headless ist.
Ich vermute, dass es keine gibt, und dass das beabsichtigt ist.
Ich habe mich das Gleiche gefragt, aber ich denke, in meinem Fall wird es in Ordnung sein - ich versuche nicht, Discourse zu verstecken.
Eine Sache, die man bei Benutzer-API-Schlüsseln im Vergleich zu Admin-API-Schlüsseln für alle Benutzer beachten sollte, ist, dass standardmäßig unterschiedliche Ratenbegrenzungen für sie gelten: Available settings for global rate limits and throttling.
Benutzer-API-Ratenbegrenzung: DISCOURSE_MAX_USER_API_REQS_PER_MINUTE: Standard 20 DISCOURSE_MAX_USER_API_REQS_PER_DAY: Standard 2880
Wenn Ihre Anwendung eine Verbindung zu einer selbst gehosteten Discourse-Site herstellt, können Sie wahrscheinlich die Admin-API-Ratenbegrenzung überschreiben. Wenn Ihre Anwendung eine Verbindung zu gehosteten Discourse-Instanzen herstellt, bieten die Benutzer-API-Ratenbegrenzungen mehr Flexibilität. Mit der Admin-API-Ratenbegrenzung müssen Sie alle Anfragen in eine ratenbegrenzte Warteschlange stellen.
Bearbeitung: Anstatt die User API Keys Specification zum Generieren der Schlüssel zu verwenden, können Sie einen Admin-API-Schlüssel zum Generieren von Benutzer-API-Schlüsseln verwenden. Das umgeht das Problem, dass Benutzer die App genehmigen müssen.
Beachten Sie, dass der unten gepostete Schlüssel für meine localhost-Domain bestimmt ist, sodass kein Risiko besteht, ihn zu posten.
In beiden Fällen haben Sie einen API-Schlüssel, der irgendwie verwaltet werden muss. Ich gehe davon aus, dass er verschlüsselt und in einer Datenbank gespeichert wird.
Verwenden Sie React für Ihr Frontend? Ich bin offen dafür, einen Weg zur Zusammenarbeit zu finden, um Redundanzen zu reduzieren und die Codezuverlässigkeit zu erhöhen. Ich denke, die Authentifizierung über SSO war der schwierigste Teil. Hoffentlich läuft es von hier an reibungslos.
Ja, es ist eine Remix/React Router-App. Also React im Frontend, Node im Backend.
Ich arbeite seit Jahren damit. Schick mir hier eine Nachricht, wenn du Fragen dazu hast.
Ich versuche, etwas zu entwickeln, das gut mit den Ratenbegrenzungen einer gehosteten Discourse-Seite funktioniert. Das war der knifflige Teil. Benutzerspezifische API-Schlüssel schienen eine mögliche Lösung zu sein, aber es gibt auch eine Ratenbegrenzung pro IP-Adresse, also verwende ich wieder nur einen einzigen API-Schlüssel und stelle alle API-Anfragen in eine Warteschlange.