Этот пост посвящен функции, которой определенно не существует, но которую я хочу реализовать самостоятельно. На данный момент я не представляю, сколько работы это может потребовать, и цель этого вопроса — попытаться понять, что именно для этого необходимо.
Немного контекста: мы работаем над решением для аутентификации без паролей. https://trykno.com/ Это решение работает как сервис, то есть владельцы сайтов, использующие его, не обязаны самостоятельно обеспечивать безопасную отправку писем или хранение каких-либо секретов и персонально идентифицирующей информации.
Для нас было бы замечательно создать форум для проекта, и мы хотели бы использовать Discourse.
Однако нам необходимо заменить систему аутентификации на Kno.
Вопросы:
Является ли система аутентификации в Discourse подключаемой?
Есть ли какие-либо жестко прописанные предположения о том, что у пользователя есть электронная почта?
Какой фреймворк используется на стороне фронтенда? (Я вижу ember-rails в файле Gemfile, но никаких ссылок на Ember в package.json)
Извините, если вопросы кажутся слишком простыми; я не разработчик на Ruby, и любая помощь в понимании проблемы была бы очень ценна. Спасибо.
Да, каждый пользователь в Discourse должен иметь адрес электронной почты. Вы можете указывать недействительные адреса (оканчивающиеся на .invalid), но мы не рекомендуем этого делать.
Ember. Однако для плагина аутентификации вам, скорее всего, не придётся работать с фронтендом.
В настоящее время можно не использовать пароль, а просто получить ссылку.
Если ваша цель — разработать kno, скорее всего, вам стоит реализовать его как OAuth-сервер. Тогда его можно будет использовать как один из нескольких источников аутентификации, где SSO является единственным альтернативным вариантом. См. Discourse OAuth2 Basic
Я вижу возможность получения ссылки, но kno предлагает больше, например, аутентификацию устройства через WebAuthn после подтверждения одноразовой электронной почты.
Разработка в качестве OAuth-сервера, к сожалению, не удовлетворяет нашим требованиям. (Мне, вероятно, стоит написать об этом в нашем FAQ, но суть в том, что Kno позволяет аутентифицироваться на одном устройстве с помощью другого).
Посмотрев на ситуацию подробнее, я понял, что смогу собрать рабочую первую версию, реализовав решение SSO, специфичное для Discourse.
Возможно ли использовать одного провайдера OAuth и отключить все остальные виды аутентификации?
В таком случае было бы также удобно, чтобы при нажатии на кнопку «Войти» автоматически запускался процесс аутентификации, то есть без открытия модального окна входа и выбора провайдера пользователем.
Ну что ж, это отлично.
Нет, я ещё не пробовал, потому что не реализовал OAuth-провайдера для своего сервиса. И, похоже, после этого мне придётся написать плагин, так как это будет новый OAuth-провайдер.
Я почти завершил интеграцию SSO, так что, думаю, самое время переключиться на использование OAuth.