大量用户API请求和失效

我刚注意到,从今年四月开始,我在仪表板安全报告中每天看到数千次用户 API 请求。

这非常奇怪,比我预期的要高出 100 到 1000 倍。

如何获取关于哪些用户正在请求密钥以及哪些用户正在发出多少请求以及哪些 API 请求的更详细报告?如果密钥具有读/写请求访问权限,我假设有人可以远程读写主题/帖子。会不会是远程网站抓取帖子?

另外,是否有办法全局使所有用户 API 密钥失效/过期?

1 个赞

只是为了确认,您是在询问用户 API 请求,还是通过您为 Discourse 站点管理员/API 页面上用户生成的 API 密钥运行的 API 请求。用户 API 请求在下面的屏幕截图中以绿色突出显示:

有关用户 API 密钥用途的详细信息,请访问:https://meta.discourse.org/t/user-api-keys-specification/48536。

除非您创建了与您的 Discourse 站点集成的应用程序,否则最可能的解释是用户通过 DiscourseHub 应用程序(https://play.google.com/store/apps/details?id=com.discourse&hl=en&gl=US&pli=1)登录该站点,或者他们正在使用类似 Fig - Native Discourse client for iOS 的应用程序与该站点进行交互。

这并不能回答您所有的问题,但您可以使用以下数据探索器查询来获得用户 API 密钥使用情况的总体概述:

SELECT * FROM user_api_keys

要获取正在向您的站点发出用户 API 密钥请求的应用程序列表,以及使用每个应用程序发出请求的用户数量:

SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name

用于连接 DiscourseHub 应用程序的用户 API 密钥的 application_name 将设置为“Discourse - unknown”。

如果用户使用用户 API 密钥与站点进行交互,则会在其首选项页面的“安全”选项卡中添加一个“应用程序”条目:

该条目显示了授予该应用程序的范围。它还允许您撤销对该应用程序的访问权限。

我没有在 Discourse UI 中看到任何过期或撤销所有用户 API 密钥的方法。只能从用户的首选项页面一次撤销一个密钥。可以通过 Rails 控制台撤销所有用户 API 密钥,但可能值得先调查密钥的使用方式。

1 个赞

是的,是用户 API 请求

1 个赞

DiscourseHub 应用的请求似乎过多。如果您在网站上安装了 Data Explorer,我很想知道此查询的结果:

SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name

我在自己的测试网站上测试了该查询,但它只有一个来自 DiscourseHub 应用的 user_api_request。我认为我已经正确地构建了查询,以处理多个用户从多个应用连接到 Discourse,但如果结果中有任何异常,请告诉我。

1 个赞

安装数据浏览器花费了一些时间,我的重建因某种原因失败了。

这是我看到的内容:

application_name user_count
Discourse - xhanse’s iPhone X 1
Discourse - iPhone 1
Discourse - xrett’s iPhone 2
Discourse - xave’s iPhone 1
Discourse - xixu’s iPhone 1
Discourse - xevin’s GS8 1

我已屏蔽了一些名称,这看起来只有几个用户。查询是否返回特定时间段的信息?对我来说,几千次 API 请求对应几个用户似乎过多。另外,一个用户似乎有 2 个 user_count,这是否意味着他/她有 2 个 API 密钥(即 2 个应用程序)?

1 个赞

这有两种可能性。要么用户有两个具有相同设备名称的 iPhone,要么他们在某个时候卸载了应用程序并重新安装了它。在这两种情况下,他们都会有多个 API 密钥。

1 个赞

不,它返回有关所有活动用户 API 密钥的详细信息。

尝试运行以下查询:

SELECT * FROM user_api_keys

我假设它只会返回 7 行。如果不是这样,请告诉我。

不一定。当用户通过 DiscourseHub 应用程序访问网站时,他们对网站的请求会被计为用户 API 请求。如果少数用户正在积极浏览网站,他们一天可能会产生 2k 次请求。

是的,这是正确的,我只看到 7 个项目。

这是否意味着一切都妥善处理了。我不知道这里的背景,这是论坛通常处理的正常负载吗?

对我来说,这似乎都很合理。作为背景,我今天通过 DiscourseHub 应用短暂登录了我的测试站点。该站点几乎没有任何内容。我浏览了几分钟,生成了 36 个用户 API 请求。在一个有很多内容可以滚动浏览的站点上,单个用户一天内生成大量请求并非不合理。

如果您仍然对此感到担忧,可以使用 Data Explorer 插件查看从此请求返回 user_id 的用户的用户活动:

SELECT * FROM user_api_keys
1 个赞

好奇心驱使我去查看了一个我几乎只通过 DiscourseHub 应用使用的网站。在过去 24 小时内,该网站有我将近 1100 次用户 API 密钥请求,而我是唯一一个拥有有效密钥的用户。:slight_smile:

2 个赞