Подтверждение правильной комбинации User+Pass через API?

Всем привет,

Мне нужна ваша помощь в том, как реализовать вход пользователей на удалённый веб-сайт, используя их существующие учётные данные Discourse (логин и пароль).

Думаю, мне не нужен SSO. Вот почему.

Сначала немного контекста о моём текущем сценарии использования и о том, почему он меня не устраивает.

У меня сейчас есть сайт по адресу https://www.example.com, на котором есть кнопка «Войти».

Когда пользователь нажимает эту кнопку, его просят ввести существующее имя пользователя Discourse и адрес электронной почты (обратите внимание: имя пользователя + email, а НЕ пароль).

Затем я беру эти два фрагмента данных и отправляю API-запрос GET по адресу:

"https://mydiscourse.comm/admin/users/list/all.json?email=" + strEmail

В заголовках этого API-вызова я указываю имя учётной записи пользователя «system» и соответствующий API-ключ для этого пользователя.

Если совпадение по адресу электронной почты найдено, я сравниваю имя пользователя, которое пользователь ввёл в моей форме, с именем пользователя, возвращённым в ответе API для указанного email.

Если они совпадают, я считаю, что пользователь вошёл в систему на моём сайте https://www.example.com.

Я создал это три-четыре года назад, и оно до сих пор отлично работает.

Но…

  1. Пользователям очень непонятно вводить комбинацию «имя пользователя + email» в форме входа
    – Большинство людей всегда вводят «имя пользователя + пароль»
    – Несмотря на огромные инструкции по всей форме, люди всё равно по привычке делают это неправильно

  2. Это небезопасно
    – Достаточно знать имя пользователя и его email, и, имея эти два (тривиальных) фрагмента информации, можно войти на https://www.example.com «за этого пользователя» с минимальными усилиями

Что я хочу сделать: чтобы пользователь нажал кнопку «Войти» на https://www.example.com и ввёл свои существующие учётные данные Discourse (имя пользователя + пароль, а не имя пользователя + email!).

Затем мой сайт на example.com отправит быстрый API-запрос на мой Discourse, подтвердит, что введённая комбинация имя пользователя + пароль верна, и вернёт существующий ID пользователя в Discourse.

Надеюсь, я объясняюсь понятно :grimacing:

Я проштудировал всю документацию по API, но никак не могу найти простой конечный пункт «login»? :thinking:

Мне не нужно и не хочется входить или выходить из самого Discourse, мне просто нужно подтвердить, что имя пользователя и пароль верны.

Любые подсказки, советы, ссылки или рекомендации будут очень кстати :blush:

Не существует API-маршрута, который возвращал бы сырой пароль пользователя, поэтому, думаю, этот подход не сработает. Судя по вашему описанию, вы хотите использовать Discourse в качестве провайдера SSO для своего веб-сайта. Это можно реализовать. Подробная информация о настройке находится здесь: Use Discourse as an identity provider (SSO, DiscourseConnect).

Спасибо @simon — беглый взгляд на эту ссылку подсказывает, что это может быть именно то, что мне нужно.

Приступаю к чтению :nerd_face: