按用户 API 密钥不起作用

我正在遵循获取每个用户 API 密钥的指导:https://meta.discourse.org/t/user-api-keys-specification/48536。

我已经完成了以下步骤:客户端生成公钥/私钥对和返回 URL,访问 Discourse 路由,用户授权 Discourse 使用该应用,然后 Discourse 生成 API 密钥。

但当 Discourse 将 API 密钥作为“payload”(载荷)通过返回 URL 发送回来时,该密钥无法使用。我尝试解密它,但失败了。

我将该密钥输入一些标准的 JavaScript 解密方法(例如 这里 的答案中所示),结果出现“长度无效”的错误(或者 DATA_LEN_NOT_EQUAL_TO_MOD_LEN,具体取决于我使用的 JavaScript 解密方法)。

有什么建议可以解决这个问题吗?

这是关键功能的一部分,因此任何帮助都非常感激。

我是否需要以某种方式更改 payload 中提供的密钥?有没有可能 payload 中提供的密钥本身就无法使用?


更多细节:

我认为我的整体方法是正确的,因为 Discourse 提供了另一种获取每个用户密钥的方法,而我能够成功解密该密钥:

如果在请求 Discourse 时省略重定向 URL,Discourse 不会执行重定向,而是直接在屏幕上打印一个密钥供用户复制。

该密钥比“payload”中提供的密钥短(大约 684 个字符,而 payload 中的密钥大约为 762 个字符)。而且该密钥可以正常工作——我能够使用 JavaScript 成功解密它。

但要求用户复制粘贴 API 密钥会让用户感到困惑——正确的流程应该是从 payload 中获取密钥。我该如何让 payload 中的密钥正常工作?

有什么想法吗?如何让负载提供的 API 密钥生效?

我已经让它运行起来了。@RGJ 很有帮助地指出了以下几点:

当 Discourse 执行重定向并将 API 密钥作为重定向 URL 中的有效负载进行解码时,该密钥会经过 URL 编码。因此,要获取实际的 API 密钥,你需要对有效负载进行 URL 解码。解码后的结果就是正常工作的 API 密钥(其长度与 Discourse 在屏幕上显示的密钥长度一致)。

我在此提供了我遵循的使其正常工作的步骤: