API-Schlüssel ermöglichen uns die Integration von Discourse mit anderen Systemen oder die Automatisierung verschiedener Aktionen. Doch große Macht bringt große Verantwortung mit sich. Wenn ein böswilliger Akteur Zugriff auf einen API-Schlüssel hat, könnte er auf sensible Daten zugreifen oder Änderungen an Ihrer Site vornehmen. Um dies zu mildern und eine zusätzliche Sicherheitsebene hinzuzufügen, können Sie nun mithilfe von Scopes (Berechtigungsstufen) einschränken, was ein API-Schlüssel tun darf.
Scopes und zulässige Parameter
Beim Erstellen eines neuen API-Schlüssels können Sie die gewünschten Scopes auswählen. Wenn Sie über das -Symbol fahren, sehen Sie eine kurze Beschreibung seiner Funktion. Der -Button zeigt Ihnen die mit diesem Scope verknüpften URLs an.
Optional können Sie auch angeben, welche Parameter akzeptiert werden. Trennen Sie mehrere Werte durch Kommas.
Migration bestehender Schlüssel
Als wir diese Funktion eingeführt haben, wurden bestehende Schlüssel zu „globalen" Schlüsseln. Um sie auf Scopes zu migrieren, müssen Sie sie widerrufen und neue erstellen.
Hinzufügen benutzerdefinierter Scopes
Plugins können benutzerdefinierte Scopes hinzufügen, indem sie die Methode add_api_key_scope aufrufen:
resource ist ein Symbol, das verwendet wird, um verwandte Scopes zu gruppieren, während action ein Hash mit folgenden Attributen ist:
actions: Eine Liste der zulässigen Controller-Aktionen. Das Format lautet controller_name#method_name.
methods: Eine Liste der zulässigen HTTP-Methoden (z. B. %i[get]). Verwenden Sie dies anstelle von actions, um nach HTTP-Methode statt nach Controller-Aktion zu matchen.
params: Eine Liste, die die Namen der zulässigen Parameter enthält.
aliases: Ein Hash, der einen anderen Namen für einen zulässigen Parameter enthält.
Wenn Sie wissen möchten, wie die Basis-Scopes definiert sind, sehen Sie hier:
Dabei habe ich für den API-Schlüssel die Berechtigungen „read“ und „read_list“ für Themen. /top.json funktioniert beispielsweise mit demselben Schlüssel. Der Endpunkt funktioniert, wenn ich einen „Global Key“ verwende.
Ich möchte den API-Schlüssel in meinem Client für das Lesen der Liste der Kategorien und Themen hinterlegen, daher ist ein schreibgeschützter Schlüssel wichtig!
Unglücklicherweise enthalten wir von Haus aus nur eine Handvoll Scopes aufgrund der hohen Anzahl verfügbarer Endpunkte. Wir werden möglicherweise in Zukunft neue hinzufügen, aber bis dahin müssen Sie sie an Ihre Bedürfnisse anpassen.
Wenn Sie einen API-Schlüssel mit Scopes verwenden, funktionieren Aufrufe von Endpunkten, die nicht von den von Ihnen gewählten Scopes abgedeckt sind, nicht. Sie können auf die -Schaltfläche klicken, um zu sehen, welche URLs akzeptiert werden.
Dies funktioniert nur für öffentliche Sites. Außerdem werden Sie Dinge wie private Kategorien nicht sehen, es sei denn, Sie sind angemeldet und haben ausreichende Berechtigungen.
Nehmen Sie Vorschläge für weitere Berechtigungen an?
Eine Sache, für die ich die API unserer Website nutzen würde, ist, dass eine andere Website prüft, ob ein Benutzer mit einer E-Mail-Adresse existiert, und diesen gegebenenfalls zu einer Gruppe hinzufügt. Ich vertraue der Website (eine andere Website innerhalb unserer Mutterorganisation), aber es scheint vernünftig, die Zugriffsmöglichkeiten auf das Notwendige zu beschränken, falls dies eine Option ist.
Ich bin super glücklich, dass sie eine API für Plugins geöffnet haben. Du kannst mit einem Plugin beginnen und prüfen, ob es in den Kern integriert werden kann.