Вход через SSO с Discourse

Я ознакомился со статьёй о SSO через Discourse Connect (Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso)).

Как я понимаю, это позволяет использовать наш API для проверки аутентификации в Discourse, а также передавать дополнительные пользовательские параметры. Поправьте меня, если я ошибаюсь.

Наша цель — использовать собственную страницу входа: когда пользователи нажимают «Войти» на discourse.open…com, должна открываться наша страница входа «kan.open..com». После успешного входа пользователь должен быть перенаправлен на сайт Discourse. Мы видели, что такие решения реализованы, например, на сайтах Twitter и Atlassian. Не могли бы вы подробнее рассказать, как этого достичь?

Это верно, если под «использовать наш API» вы имеете в виду «мы модифицируем наш API для поддержки Discourse Connect». Детали того, как это сделать, описаны в документах, на которые вы сослались. Если вы хотите, чтобы все пользователи перенаправлялись сразу, не видя ничего на вашем форуме, вам нужно включить настройку сайта «требуется вход».

Здравствуйте, сообщество Discourse,

У меня возник вопрос по настройке SSO для Discourse (DiscourseConnect). Существует ли возможность включать дополнительные параметры в запрос, когда Discourse обращается к URL DiscourseConnect? В частности, я хотел бы передавать данные пользователя в запросе к URL DiscourseConnect, например, токен пользователя или его идентификатор, чтобы использовать их для аутентификации пользователя и завершения процесса входа через SSO.

Столкнулся с проблемой: пользователям приходится входить в систему дважды — сначала в мой проект, а затем в Discourse — при подключении через SSO. В идеале я хотел бы упростить процесс, чтобы, если пользователь уже вошел в мой проект, ему не приходилось снова вводить те же учетные данные в моем проекте.

Существует ли в Discourse какая-либо функция или рекомендации по решению этой задачи? Буду признателен за любые советы или предложения, которые помогут сделать процесс SSO более плавным.

Спасибо!

Подход к решению такой ситуации описан в разделе «Делая процесс бесшовным для аутентифицированных пользователей» этой темы: Create a DiscourseConnect login link.

При первом входе через SSO в Discourse я хотел бы узнать, существует ли какой-либо API или метод, который может предоставить мне данные пользователя, такие как идентификатор пользователя или токен, которые я могу отправить в API Discourse. В ответ Discourse включит эти данные, например идентификатор пользователя или токен, в запрос URL-адреса Discourse Connect.

Вы можете использовать external_id, который вы установили в полезной нагрузке DiscourseConnect, чтобы сделать запрос к API Discourse. Этот запрос вернет полный объект пользователя.

Вы не понимаете, что я хочу донести. Я спрашиваю не о получении данных пользователя из Discourse после входа. Пожалуйста, внимательно изучите весь описанный мной процесс и скажите, возможно ли это реализовать с помощью Discourse, или мне следует использовать собственный подход.

В настоящее время у меня есть проект, построенный на фреймворке Laravel, и я хочу предоставить пользователям доступ к форуму Discourse для обратной связи. Я решил реализовать вход через SSO для Discourse. Я создал учётную запись администратора в Discourse и включил необходимые настройки для SSO-входа, включая активацию SSO, установку URL перенаправления и настройку секретного ключа.

Теперь я добавил кнопку «Discourse Connect» внутри своего проекта. Я хочу, чтобы при нажатии на эту кнопку пользователи регистрировались или входили с использованием моих учётных данных и автоматически авторизовывались в Discourse. Когда пользователь нажимает на кнопку «Discourse Connect», его перенаправляют на базовый URL моего сообщества с конечной точкой сессии/SSO, откуда он снова перенаправляется на URL «Discourse Connect». В запросе я получаю параметры SSO и sig, которые, как я понимаю, предназначены для проверки подлинности. Однако мне нужен user_id или какой-либо идентификатор, чтобы извлечь данные пользователя из моей базы данных для проверки, аутентификации и входа в Discourse.

Мой вопрос: существует ли в Discourse API или какой-либо механизм, который мог бы возвращать user_id вместе с параметрами SSO и sig в запросе? Это важно, потому что без получения данных пользователя в запросе мне пришлось бы заставлять пользователя входить в систему снова, что создаст плохой пользовательский опыт. По сути, когда пользователь входит в мой проект и нажимает кнопку «Discourse Connect», срабатывает URL «Discourse Connect», и я получаю параметры SSO и sig. Для аутентификации пользователя мне нужно извлечь данные пользователя из базы данных, но это потребует повторного входа пользователя, чего я хочу избежать.

Мне нужен бесшовный опыт: если пользователь уже однажды вошёл в систему, ему не нужно входить снова. Он должен иметь возможность получить доступ к форуму Discourse, используя свои учётные данные из проекта, напрямую.

Я не уверен, что правильно понимаю, где возникает проблема.

Вы используете эту библиотеку для DiscourseConnect: GitHub - spinen/laravel-discourse-sso: Integrate Discourse SSO into Laravel · GitHub?

Изучая этот код (laravel-discourse-sso/src/Controllers/SsoController.php at develop · spinen/laravel-discourse-sso · GitHub), я не вижу, как он обрабатывает случай, когда пользователь уже вошёл в приложение Laravel.