Мы стремимся создать сообщество, используя API Discourse, но столкнулись с проблемой в процессе работы.
Наш фронтенд — это React-приложение, а бэкенд построен на NodeJS с микросервисной архитектурой. Мы управляем всем процессом аутентификации на нашей стороне.
Фронтенд формирует полезную нагрузку (payload) с nonce и информацией о пользователе, а затем делает запрос к адресу вида example.com/session/SSO?sso=xx&sig=xx.
Discourse затем делает обратный вызов на указанный URL (discourse_connect_url), где я должен валидировать полученную нагрузку и вернуть URL для перенаправления, после чего пользователь будет перенаправлен в Discourse.
Однако, когда я создаю полезную нагрузку с информацией о пользователе, мне не удается передать её от фронтенда в Discourse, а затем в бэкенд. Может ли кто-нибудь помочь или моё понимание процесса верно? Я также искал решения на форуме, но безрезультатно.
Обратите внимание: когда я жестко задаю информацию о пользователе непосредственно в бэкенде, я могу успешно авторизовывать пользователей в Discourse.
Мы хотим, чтобы наш сайт выступал провайдером аутентификации для Discourse и передавал информацию о пользователе от фронтенда к бэкенду. Не могли бы вы помочь с описанием процесса или предоставить примеры реализации на JavaScript?
Поток на самом деле работает в обратном порядке по сравнению с тем, что вы описали. При настройке Discourse Connect на вашем сайте:
Нажатие кнопки входа перенаправит вас на discourse_connect_url с двумя GET-параметрами: sso и sig.
Пользователь введет свои учетные данные на странице discourse_connect_url, и ваш сайт выполнит аутентификацию. Если аутентификация успешна, вам нужно декодировать параметр sso и выполнить дальнейшие шаги, описанные в теме Discourse Connect.
У меня возникла похожая проблема с потоком: я не хочу, чтобы пользователь заходил на Discourse и нажимал кнопку «Войти». Мне нужно, чтобы пользователь заходил на мою платформу, нажимал кнопку «Перейти в Discourse» и попадал в Discourse прозрачным образом.
Возможно ли, чтобы моя платформа генерировала «nonce» для пользователя через API безопасным способом, без необходимости, чтобы пользователь сначала заходил на Discourse и нажимал кнопку «Войти»?
Примечание: я могу сделать это сам, зайдя на Discourse и нажав кнопку за него, без ведома пользователя, но это небезопасно для приложения.