ユーザーごとのAPIキーが機能しない

ユーザーごとの API キーを取得するためのガイドラインに従っています:User API keys specification

手順はすべて完了しました。クライアントが公開鍵/秘密鍵のペアとリダイレクト URL を生成し、Discourse のルートに移動し、ユーザーがアプリの利用を Discourse に承認し、Discourse が API キーを生成します。

しかし、Discourse がリダイレクト URL の「ペイロード」として API キーを返した際、そのキーが機能しません。復号化を試みますが、成功しません。

そのキーをいくつかの標準的な JavaScript 復号化(例えば こちら の回答にあるようなもの)に適用すると、「length is invalid」エラー(または使用している復号化 JavaScript メソッドによっては DATA_LEN_NOT_EQUAL_TO_MOD_LEN)が表示されます。

対処法に関するアイデアはありますか?

これは重要な機能の一部ですので、ご支援いただければ大変助かります。

ペイロードに含まれるキーを何らかの方法で変更する必要がありますか?ペイロードに含まれるキーが機能しない可能性があるのでしょうか?


もう少し詳細を:

私の全体的手法は正しいと考えています。なぜなら、Discourse はユーザーごとのキーを取得する別の方法を提供しており、そのキーは復号化できるからです:

Discourse へのリクエストからリダイレクト URL を省略すると、Discourse はリダイレクトを行いません。代わりに、ユーザーがコピーできるように画面上にキーを表示します。

そのキーは「ペイロード」に含まれるキーよりも短いです(約 684 文字で、ペイロードのキーは約 762 文字です)。そして、そのキーは機能します。JavaScript を使って正常に復号化できます。

しかし、ユーザーに API キーをコピー&ペーストさせるのは混乱を招きます。適切なフローはペイロードからキーを取得することです。そのペイロードのキーを機能させるにはどうすればよいでしょうか?

これについて何かアイデアはありますか?ペイロードから提供された API キーを動作させるにはどうすればよいでしょうか?

動作するようになりました。@RGJ さんが以下を親切に指摘してくれました:

Discourse がリダイレクトを行い、API キーをリダイレクト URL のペイロードとしてデコードする際、そのキーは URL エンコーディングされます。したがって、実際の API キーを取得するには、ペイロードに対して URL デコーディングを行う必要があります。その結果、正しく機能する API キーが得られます(これは Discourse が画面に表示するキーの長さと一致します)。

私がこの動作を実現するために踏んだ手順を以下に示します: