Discourse API経由でのアクセス、キーまたはユーザーが拒否されました

モデレーターとして、DiscourseフォーラムのAPIを使用したいと考えています。通常は有効になっており、APIキーを取得できました。このスクリプトを使用しました。

32文字のキー(これで正しいですか?)を取得でき、アカウントのセキュリティ設定では、アプリは次の権限で表示されます。

すべて読み取る
すべて書き込む
ライブアップデート
外部サービスへのプッシュ通知
通知の読み取りとクリア
ユーザーセッション情報の読み取り
ワンタイムログイントークンの作成

これはかなり良さそうです。しかし、次のようなスクリプトでアクセスしようとすると:

from pydiscourse import DiscourseClient

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

client.user("tflidd")

これはPythonライブラリなので、機能するはずです。api_keyは実際のキーではなく、この特定の形式です。ユーザー名またはAPIキーが無効であるというエラーが発生します。

ユーザー名を使用しますか、それともアプリ名を使用しますか?
APIキーは少なくとも正しい形式ですか、それとも何かを復号化する際に問題が発生しましたか?

ここで説明されているようにcurlを使用すると(Discourse-user-notes API - #4 by codetricity

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

次のようなエラーも発生します。
{"errors":["You are not permitted to view the requested resource. The API username or key is invalid."],"error_type":"invalid_access"}

Webブラウザでログインしている状態で同じURLをJSONで開くと、正しいJSONオブジェクトが表示されます。したがって、トピックは存在し、アクセス権限もあります(これは公開トピックでした)。

私は単なるモデレーターであり、直接の管理者アクセス権はありません。ログから追加情報を要求できますが、何を探すべきかのヒントがあれば教えてください。

もし関係があれば、インストールされているバージョンは次のとおりです。3.2.0.beta4-dev

DiscourseClient Python ライブラリは、Admin API キー (Admin → API) で動作するように設計されています。
generate_api_key から生成されるのは Client API キー です。

代わりに API-User-Key および API-User-Username ヘッダーを渡す必要があります。
例:

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

:+1: これで動作します。どれだけ時間を費やしたかわかりません。

しかし、API エンドポイントはここで説明されているものと同じです。

(もしそうなら、管理 API キーでの認証方法だけでなく、クライアント API キーについても言及していただけると幸いです)

pydiscourse クライアントには、別のヘッダーを使用するためのハッキーな回避策があります。

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