Я следую руководству по получению API-ключей для каждого пользователя: User API keys specification.
Я выполнил все шаги: клиент генерирует пару публичного/приватного ключей и URL возврата, переходит по маршруту Discourse, пользователь предоставляет приложению разрешение на использование Discourse, и Discourse генерирует API-ключ.
Однако, когда Discourse возвращает API-ключ в виде «payload» в URL возврата, этот ключ не работает. Я пытаюсь его расшифровать, но у меня не получается.
Я вставляю этот ключ в стандартную JavaScript-функцию расшифровки (как, например, в ответе здесь), и получаю ошибку «length is invalid» (или DATA_LEN_NOT_EQUAL_TO_MOD_LEN, в зависимости от используемого метода расшифровки в JavaScript).
Есть ли у кого-нибудь идеи, как это исправить?
Это критически важная функциональность, поэтому любая помощь будет очень кстати.
Нужно ли мне каким-то образом изменить ключ, предоставленный в payload? Возможно ли, что ключ из payload вообще не работает?
Немного подробнее:
Я думаю, что мой общий подход верен, потому что Discourse предлагает ещё один способ получения ключа для каждого пользователя, и я успешно расшифровываю этот ключ:
Если я не указываю URL перенаправления в запросе к Discourse, он не выполняет перенаправление. Вместо этого он отображает ключ на экране, чтобы пользователь мог его скопировать.
Этот ключ короче, чем ключ из «payload» (около 684 символов против примерно 762 символов в payload). И этот ключ работает — я успешно расшифровываю его с помощью JavaScript.
Но просить пользователя копировать и вставлять API-ключ — это запутанно для пользователей; правильный сценарий — получение ключа из payload. Как заставить работать ключ из payload?