Quizás estamos construyendo lo mismo
aunque el mío es solo parcialmente headless.
Sospecho que no lo hay, y que es por diseño.
He estado pensando lo mismo, pero creo que en mi caso estará bien, no estoy tratando de ocultar Discourse.
Una cosa a tener en cuenta con las claves API de usuario frente a las claves API de todos los usuarios de administrador es que, por defecto, se les aplican límites de tasa diferentes: Available settings for global rate limits and throttling.
Límite de tasa de API de usuario:
DISCOURSE_MAX_USER_API_REQS_PER_MINUTE: por defecto 20
DISCOURSE_MAX_USER_API_REQS_PER_DAY: por defecto 2880
Límite de tasa de API de administrador:
DISCOURSE_MAX_ADMIN_API_REQS_PER_MINUTE: 60
Si tu aplicación se conecta a un sitio de Discourse autoalojado, es probable que puedas anular el límite de tasa de la API de administrador. Si tu aplicación se conecta a instancias de Discourse alojadas, los límites de tasa de la API de usuario ofrecen mucha más flexibilidad. Con el límite de tasa de la API de administrador, terminas teniendo que poner todas las solicitudes en una cola con límite de tasa.
Editar: en lugar de usar la Especificación de claves API de usuario para generar las claves, puedes usar una clave API de administrador para generar claves API de usuario. Eso evita el problema de que los usuarios tengan que aprobar la aplicación.
Ten en cuenta que la clave publicada a continuación es para mi dominio localhost, por lo que no hay riesgo en publicarla.
parámetros de clave sin escapar: {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\"}]}}
En cualquier caso, te quedas con una clave API que debe ser gestionada de alguna manera. Supongo que cifrada y guardada en una base de datos.