如何通过 API 授予 Discourse 访问权限?

我完全是新手。我怎样才能通过 API 获得 Discourse 的访问权限?

首先,通过导航到 admin > advanced > API keys,单击 new API key,然后配置其详细信息来创建一个 API 密钥。然后,在 API 请求的 Api-KeyApi-Username 标头中使用生成的 API 密钥以及创建它的用户的用户名。@Enit

@Enit 您好,能否进一步说明?您是指通过 API 授予对私有论坛的访问权限,还是其他什么?

谢谢!

1 个赞

我们正在构建一个由人工智能驱动的记忆系统,其中多个 AI 代理(DeepSeek、Claude、ChatGPT 等)将我们的 Discourse 论坛用作共享知识库进行交互。

当前设置:

  • 自托管 Discourse(最新稳定版)
  • VPS:Ubuntu 22.04,基于 Docker 的安装
  • 管理员用户:adminjozsi
  • AI 代理用户:grokenit(通过电子邮件邀请创建)

问题

我们遇到了频繁的 API 密钥失效问题:

  1. API 密钥意外过期,即使设置为“1 年”有效期
  2. 随机出现**“无效 API”错误**,需要重新生成密钥
  3. 昨天还能正常工作的密钥,今天突然失效,且没有进行任何配置更改
  4. POST 请求到 /posts.json 时出现错误:{"errors":["Invalid API key"]}

我们尝试过的内容

:white_check_mark: 用户级别 API 密钥(而非全局)

  • 描述:“Grok - 用户 API 密钥 - adminjozsi”
  • 用户级别:“单个用户”→ adminjozsi
  • 范围:全局

:white_check_mark: 速率限制调整:

  • 将“Rate limit new user create post”设置为 0
  • 增加了新用户的各项速率限制

:white_check_mark: 多次重新生成:

  • 过去一周生成了 5 个以上的 API 密钥
  • 每个密钥最初都能正常工作,但在 24-48 小时内失效

问题

1. 为什么 API 密钥会过期,尽管设置为 1 年有效期?

是否存在我们遗漏的隐藏过期机制?服务器日志未显示任何撤销事件。

2. 两个不同的 API 密钥可以共享同一个 Api-Username 标头吗?

我们的架构思路:

  • API 密钥 #1 → 由人工管理员(我)用于手动操作
  • API 密钥 #2 → 由 AI 代理(DeepSeek)用于自动发帖
  • 两个密钥 → 相同的 Api-Username: adminjozsi 标头

问题: Discourse 会正确处理这种情况,还是期望 1 个密钥 = 1 个用户?

3. 我们应该为每个 AI 代理创建单独的用户吗?

替代方案:

  • 用户 adminjozsi → 人工管理员(我)
  • 用户 grokenit → AI 代理 #1(DeepSeek)
  • 用户 claude-ai → AI 代理 #2(Claude)
  • 每个用户都有自己的 API 密钥

担忧:

  • AI 代理账户是否需要调整信任级别?
  • 这会引起速率限制问题吗?
  • 这是机器人/代理集成的推荐模式吗?

4. 对于无头/自动化使用,是否存在 API 稳定性最佳实践?

我们需要极其稳定的 API 身份验证,因为:

  • AI 代理 24/7 运行,无需人工监督
  • 发帖失败 = 我们的记忆系统中丢失数据
  • 重新生成密钥需要手动干预

技术细节

API 请求格式:

curl -X POST "https://www.enit.hu/posts.json" \
  -H "Api-Key: [KEY]" \
  -H "Api-Username: adminjozsi" \
  -H "Content-Type: application/json" \
  -d '{"title":"Test","raw":"Content","category":6}'

最初有效: :white_check_mark: 返回 {"id":123,"topic_id":45,...}
24-48 小时后: :cross_mark: 返回 {"errors":["Invalid API key"]}

服务器环境:

  • Discourse 版本:3.6.0.beta2-latest (f26f894bfc)
  • 基于 Docker 的安装
  • 无反向代理(直接通过 Let’s Encrypt 进行 HTTPS)
  • 无 CDN 或缓存层

我们需要什么

理想解决方案:

  1. 稳定的 API 密钥,不会意外过期
  2. 关于多代理架构(1 个密钥 vs 多个密钥)的清晰指导
  3. 针对密钥应有效但出现“无效 API”错误的调试技巧

任何见解都将不胜感激!这对我们的 AI 集成项目来说是一个关键的障碍。

论坛网址: https://www.enit.hu
乐意提供更多日志/详细信息!

我做了这个。API工作几个小时后就停止工作了。

我的名字是 József,我来自匈牙利,我在一家工厂上夜班。
我不是开发人员或 IT 人员,只是想为自己构建一些有用的东西——一个用于整理工作和私人笔记的小系统。

我在自己的 VPS 上安装了 Discourse,因为我想把它用作私人日记或记忆工具。
它不是公开的,没有人使用它,它只是为我一个人准备的。
我使用它以及一些 AI 助手(如 ChatGPT 或 Claude)来撰写和整理关于日常工作、农业或家庭记忆的简短条目。
它帮助我记住工厂的例行程序,跟踪小型项目,并将事物集中在一个地方进行整理。

每次我在管理面板中创建 API 密钥时,它只能工作几个小时。
然后它突然停止工作并显示“无效的 API 密钥”。
我必须创建一个新的,这会破坏我的设置。
这在一周内已经发生过好几次了。

用户级 API 密钥(非全局)

速率限制设置为 450

已检查日志

尝试了不同的设置

什么都没有帮助——密钥在几个小时后仍然会失效。

有没有办法创建一个不会自动过期的 API 密钥?
或者,对于单用户设置,是否有更好的身份验证方法?

这个 Discourse 设置真的可以帮助我管理我的工作和个人生活。
这是一个私有系统,在我的自己的服务器上,没有公共用户——只有我。
如果这个问题可以解决,我相信其他人也可以以这种方式使用 Discourse,不仅仅是作为论坛,还可以作为个人记忆系统。

技术细节

  • 域名:https://www.enit.hu

  • 版本:Discourse 3.6.0.beta2-latest

  • 设置:Docker on Ubuntu 22.04 LTS

  • VPS:RackForest (2GB RAM)

  • 用户:单个管理员 (adminjozsi)

  • 为什么密钥会失效?

  • 是否有隐藏的过期设置?

  • 如何使其稳定?

我非常感谢您提供的任何帮助。
如果我找到一个有效的解决方案,我将很乐意写一篇简短的指南,以便其他处境类似的人也能使用它。

再次感谢,
József Tomkó
https://www.enit.hu