Acesso via API do Discourse, chave e/ou usuário rejeitado

Como moderador, gostaria de usar a API para um fórum discourse. Normalmente, ela estava ativada e consegui obter uma chave de API. Usei este script:

Consegui recuperar uma chave que tem 32 caracteres (está correto?), e nas configurações de segurança da minha conta, o aplicativo mostra com estas permissões:

Ler tudo
Escrever tudo
Atualizações ao vivo
Notificações push para serviços externos
Ler e limpar notificações
Ler informações de sessão do usuário
Criar um token de login de uso único

Isso parece bom. No entanto, quando tento acessar através de um script com:

from pydiscourse import DiscourseClient

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

client.user("tflidd")

É uma biblioteca python, então suponho que deva funcionar. A api_key tem este formato específico, não é a chave real. Recebo o erro de que o nome de usuário ou a chave de API são inválidos.

Eu uso meu nome de usuário ou o nome do aplicativo?
A chave de API tem pelo menos o formato correto, talvez a descriptografia de algo tenha dado errado?

Se eu usar o curl como aqui (Discourse-user-notes API - #4 by codetricity):

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

Também recebo um erro:
{"errors":["Você não tem permissão para visualizar o recurso solicitado. O nome de usuário ou a chave da API são inválidos."],"error_type":"invalid_access"}

Se eu abrir o mesmo URL com o json no meu navegador onde estou logado, o navegador web mostra o objeto json correto. Portanto, o tópico existe e eu tenho permissões para acessá-lo (este era até mesmo um tópico público).

Sou apenas um moderador, sem acesso direto de administrador. Eu poderia pedir mais informações dos logs, se você tiver sugestões sobre o que procurar.

Caso importe, a versão instalada é: 3.2.0.beta4-dev

A biblioteca Python DiscourseClient foi projetada para funcionar com uma chave de API de Admin (Admin → API).
O que você gera de generate_api_key é uma chave de API de Cliente.

Você precisa passar os cabeçalhos API-User-Key e API-User-Username em vez disso.
Por exemplo:

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

:+1: isso funciona, você não sabe quanto tempo gastei com isso.

Mas os endpoints da API são os mesmos descritos aqui

?

(se sim, seria ótimo mencionar não apenas como autenticar com a chave de API de administrador, mas também mencionar a chave de API do cliente)

Para o cliente pydiscourse, existe uma solução alternativa “hacky” para usar um cabeçalho 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 curtida