Поток OAuth 2 для Imgur в плагине Discourse

Привет,

Я разрабатываю очень специфичный плагин для нашего экземпляра Discourse и у меня возникло несколько вопросов.

На каком-то этапе плагину придется отправлять коллекцию изображений тем Discourse в Imgur. Часть, отвечающая за сбор этих изображений, уже готова.

Сейчас я пытаюсь пройти аутентификацию в API Imgur, используя их поток OAuth2. Я уже создал административный интерфейс для плагина, который позволяет нажать кнопку и авторизовать плагин в вашем аккаунте Imgur. После входа пользователя вызывается URL обратного вызова (настроенный как мой экземпляр Discourse и конкретный маршрут, созданный мной в плагине), который получает токен доступа (см. пример).

http://localhost:3000/admin/plugins/plugin_name/callback#access_token=<token>&...

Мой вопрос: как мне получить этот токен обратно? Я понятия не имею, с чего начать.

Мое понимание таково, что поскольку токен возвращается в виде хэш-параметра, это должно быть реализовано на стороне JS. Я попытался настроить контроллер и маршрут для моего URL обратного вызова, но не могу понять, как прочитать URL (и особенно его хэш-часть) оттуда. (Я не нашел ничего полезного в документации Ember.js или на StackOverflow). Я пробовал настроить различные слушатели событий, но они, похоже, никогда не срабатывают.

Мой второй вопрос: где мне следует хранить токен и токен обновления? Могу ли я сохранить его как системную настройку из плагина? Я слышал о PluginStore, но он доступен только в Ruby (что означало бы создание конечной точки для клиента, чтобы отправлять эти токены на сервер). Также, безопасно ли это с точки зрения безопасности?

Спасибо!

Редактирование: В имени файла моего маршрута была опечатка — отсутствовала буква «s», поэтому ничего не срабатывало…

Вы не сможете добиться этого через HTTP к localhost. Рекомендуется понадобится перейти симулировать HTTPS с помощью инструмента, такого как https://ngrok.com/, или запустить ваш сервер разработки в облаке в режиме HTTPS с доменом.

Я думал, что это тоже понадобится, но меня корректно перенаправляет на мой локальный URL, и токен отображается в URL.

Да, вы правы, клиент может использовать HTTP. Проблема в том, что трафик можно перехватить и прочитать токены, поэтому использование OAuth2 изначально бессмысленно :). Лично мне было бы комфортнее работать с полным финальным протоколом на этапе разработки, чтобы убедиться, что мой код работает корректно.

Да, я полностью согласен, на данном этапе это только для целей разработки. Конечно, в продакшене я бы использовал HTTPS :slight_smile: