Acceso vía Discourse API, clave y/o usuario rechazado

Como moderador, me gustaría usar la API para un foro de Discourse. Normalmente estaba activada y logré obtener una clave de API. Usé este script:

Logré recuperar una clave que tiene 32 caracteres de longitud (¿es correcto?), y en la configuración de seguridad de mi cuenta, la aplicación muestra estos permisos:

Leer todo
Escribir todo
Actualizaciones en vivo
Notificaciones push a servicios externos
Leer y borrar notificaciones
Leer información de sesión del usuario
Crear un token de inicio de sesión de un solo uso

Eso parece bastante bueno. Sin embargo, cuando intento acceder a través de un script con:

from pydiscourse import DiscourseClient

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

client.user("tflidd")

Es una biblioteca de Python, así que supongo que debería funcionar. La api_key tiene este formato específico, no es la clave real. Recibo el error de que el nombre de usuario o la clave de API no son válidos.

¿Uso mi nombre de usuario o el nombre de la aplicación?
¿La clave de API tiene al menos el formato correcto, tal vez la descodificación de algo salió mal?

Si uso curl como aquí (Discourse-user-notes API - #4 by codetricity):

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

También obtengo un error:
{"errors":["You are not permitted to view the requested resource. The API username or key is invalid."],"error_type":"invalid_access"}

Si abro la misma URL con el json en mi navegador donde estoy conectado, el navegador web muestra el objeto json correcto. Así que el tema existe y tengo permisos para acceder a él (incluso era uno público).

Solo soy moderador, sin acceso directo de administrador. Podría pedir más información de los registros, si tiene alguna indicación de qué buscar.

En caso de que importe, la versión instalada es: 3.2.0.beta4-dev

La biblioteca de Python DiscourseClient está diseñada para funcionar con una clave de API de administrador (Administrador → API).
Lo que genera generate_api_key es una clave de API de cliente.

Necesita pasar las cabeceras API-User-Key y API-User-Username en su lugar.
Por ejemplo:

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

:+1: esto funciona, no sabes cuánto tiempo pasé en esto.

Pero los puntos finales de la API son los mismos que se describen aquí

?

(si es así, sería genial mencionar no solo cómo autenticarse con la clave API de administrador, sino también mencionar la clave API del cliente)

Para el cliente pydiscourse, existe una solución alternativa improvisada para usar una cabecera diferente:

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 me gusta