Talvez estejamos construindo a mesma coisa
embora o meu seja apenas parcialmente headless.
Suspeito que não exista, e que seja de propósito.
Eu também tenho me perguntado sobre a mesma coisa, mas acho que no meu caso tudo bem - eu não estou tentando esconder o Discourse.
Uma coisa a ter em mente com chaves de API de Usuário versus chaves de API de Todos os Usuários de administrador é que, por padrão, elas têm limites de taxa diferentes aplicados a elas: Available settings for global rate limits and throttling.
taxa de limite de API de usuário:
DISCOURSE_MAX_USER_API_REQS_PER_MINUTE : padrão 20
DISCOURSE_MAX_USER_API_REQS_PER_DAY : padrão 2880
taxa de limite de API de administrador:
DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE : 60
Se sua aplicação estiver se conectando a um site Discourse auto-hospedado, você provavelmente poderá substituir o limite de taxa da API de administrador. Se sua aplicação estiver se conectando a instâncias Discourse hospedadas, os limites de taxa da API de usuário oferecem muito mais flexibilidade. Com o limite de taxa da API de administrador, você acaba tendo que colocar todas as solicitações em uma fila com limite de taxa.
Editar: em vez de usar a Especificação de Chaves de API de Usuário para gerar as chaves, você pode usar uma chave de API de administrador para gerar chaves de API de usuário. Isso contorna o problema de os usuários terem que aprovar o aplicativo.
Note que a chave postada abaixo é para meu domínio localhost, então não há risco em postá-la.
parâmetros de chave não escapados: {key:description:sally} {key:username:sally} {key:scopes:[scope_id:topics:write]} {key:scopes:[key:write]} {key:scopes:[name:write]} {key:scopes:[params:[topic_id]]} {key:scopes:[urls:[/posts (POST)]]} {key:scopes:[selected:true]}
❯ curl -X POST \"http://localhost:4200/admin/api/keys\" \
-H \"Api-Key: $api_key\" \
-H \"Api-Username: system\" \
-H \"Content-Type: application/json\" \
-d $json
{\"key\":{\"id\":29,\"key\":\"f5c6307b51dd2882bde525dc9775fe7504b55c93fa40177b650f9e6b77a9d25b\",\"truncated_key\":\"f5c6\",\"description\":\"sally\",\"last_used_at\":null,\"created_at\":\"2024-06-02T00:44:19.944Z\",\"updated_at\":\"2024-06-02T00:44:19.944Z\",\"revoked_at\":null,\"user\":{\"id\":3,\"username\":\"sally\",\"avatar_template\":\"/user_avatar/127.0.0.1/sally/{size}/58_2.png\"},\"api_key_scopes\":[{\"resource\":\"topics\",\"action\":\"write\",\"parameters\":[\"topic_id\"],\"urls\":[\"/posts (POST)\"],\"allowed_parameters\":{},\"key\":\"write\"}]}}
Em qualquer um dos casos, você fica com uma chave de API que precisa ser gerenciada de alguma forma. Presumo que criptografada e salva em um banco de dados.