Zugriff über Discourse API, Key und/oder Benutzer abgelehnt

Als Moderator möchte ich die API für ein Discourse-Forum verwenden. Normalerweise war sie aktiviert und ich habe es geschafft, einen API-Schlüssel zu erhalten. Ich habe dieses Skript verwendet:

Ich habe es geschafft, einen Schlüssel abzurufen, der 32 Zeichen lang ist (stimmt das?), und in den Sicherheitseinstellungen meines Kontos zeigt die App mit diesen Berechtigungen:

Alle lesen
Alle schreiben
Live-Updates
Push-Benachrichtigungen an externe Dienste
Benachrichtigungen lesen und löschen
Informationen zur Benutzersitzung lesen
Einmaliges Anmeldetoken erstellen

Das sieht ziemlich gut aus. Wenn ich jedoch versuche, über ein Skript mit Folgendem darauf zuzugreifen:

from pydiscourse import DiscourseClient

client = DiscourseClient(
        'https://forum.example.com',
        api_username='tflidd',
        api_key='388b79103056fede1d3223dae032df99')

client.user("tflidd")

Dies ist eine Python-Bibliothek, daher gehe ich davon aus, dass sie funktionieren sollte. Der API-Schlüssel hat dieses spezifische Format, es ist nicht der tatsächliche Schlüssel. Ich erhalte die Fehlermeldung, dass entweder der Benutzername oder der API-Schlüssel ungültig sind.

Verwende ich meinen Benutzernamen oder den App-Namen?
Ist der API-Schlüssel zumindest im richtigen Format, vielleicht ist beim Entschlüsseln etwas schiefgelaufen?

Wenn ich curl wie hier verwende (Discourse-user-notes API - #4 by codetricity):

curl https://forum.example.com/t/95783.json\ -H 'Api-Key: 388b79103056fede1d3223dae032df99'\ -H 'Api-Username: tflidd'

Ich erhalte ebenfalls einen Fehler:
{"errors":["You are not permitted to view the requested resource. The API username or key is invalid."],"error_type":"invalid_access"}

Wenn ich dieselbe URL mit den JSON-Daten in meinem Browser öffne, wo ich angemeldet bin, zeigt der Webbrowser das richtige JSON-Objekt an. Der Thread existiert also und ich habe die Berechtigung, darauf zuzugreifen (dies war sogar ein öffentlicher Thread).

Ich bin nur Moderator, habe keinen direkten Admin-Zugriff. Ich könnte weitere Informationen aus den Protokollen anfordern, wenn Sie Hinweise haben, wonach ich suchen soll.

Falls es wichtig ist, die installierte Version ist: 3.2.0.beta4-dev

Die DiscourseClient Python-Bibliothek ist für die Arbeit mit einem Admin-API-Schlüssel (Admin → API) konzipiert.
Was Sie von generate_api_key generieren, ist ein Client-API-Schlüssel.
Sie müssen stattdessen Header API-User-Key und API-User-Username übergeben.
Zum Beispiel:

curl https://forum.example.com/t/95783.json -H 'Api-User-Key: 388b79103056fede1d3223dae032df99' -H 'Api-User-Username: tflidd'

:+1: das funktioniert, du weißt nicht, wie viel Zeit ich damit verbracht habe.

Aber die API-Endpunkte sind die gleichen, wie hier beschrieben

(Wenn ja, wäre es großartig, nicht nur zu erwähnen, wie man sich mit dem Admin API-Schlüssel authentifiziert, sondern auch den Client-API-Schlüssel zu erwähnen)

Für den pydiscourse-Client gibt es einen umständlichen Workaround, um einen anderen Header zu verwenden:

from pydiscourse import DiscourseClient

client = DiscourseClient(
        'https://forum.example.com',
        api_username='tflidd',
        api_key='388b79103056fede1d3223dae032df99')

headers = {
            "Accept": "application/json; charset=utf-8",
            "User-Api-Key": '388b79103056fede1d3223dae032df99',
            "User-Api-Username": 'tflidd',
        }

slug = "abc"
topic_id = 1234

client.topic(slug=slug, topic_id=topic_id, override_request_kwargs=override_request_kwargs)
1 „Gefällt mir“