Вход без пароля с использованием ключей доступа

Продолжая обсуждение в Support passwordless login with Passkeys и после нескольких недель внутреннего тестирования, мы рады сообщить, что поддержка ключей доступа (passkeys) теперь доступна в Discourse.

Что такое ключи доступа

Ключи доступа — это более безопасная и простая альтернатива использованию паролей для аутентификации. Создание и использование ключей доступа сейчас широко поддерживается на различных платформах и в браузерах. По сравнению с паролями, ключи доступа обладают встроенными преимуществами безопасности благодаря сильным учетным данным, генерируемым платформой, и биометрической проверке личности (например, Touch ID, Face ID, PIN-код или пароль устройства). Ключи доступа также защищены от утечек на стороне сервера (закрытая часть ключа никогда не покидает устройство) и фишинга (каждый ключ привязан только к одному веб-сайту или сервису).

Внедрение функции

Если вы являетесь клиентом хостинга, поддержка ключей доступа будет развернута на вашем экземпляре в течение следующих нескольких дней. Если вы хотите включить их прямо сейчас, пожалуйста, обратитесь к @team здесь на meta или напишите по электронной почте на team@discourse.org.

Если вы самостоятельно размещаете Discourse, обратите внимание, что функция вскоре будет включена по умолчанию в ядре Discourse теперь включена по умолчанию в ядре начиная с этого коммита. Если вы хотите отключить её, вы можете сделать это через консоль Rails:

launcher enter app
rails c
SiteSetting.enable_passkeys = false

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


После включения функции пользователи могут добавить ключи доступа к своей учетной записи, перейдя на вкладку «Безопасность» в настройках пользователя:

После регистрации ключа доступа вход с его помощью можно выполнить через выпадающее меню автозаполнения под полем имени пользователя (1) или нажав кнопку «Войти с помощью ключа доступа» (2).

Дополнительные сведения

Существует множество ресурсов и руководств по ключам доступа. Я нашел следующие наиболее полезными:

Возможные улучшения в будущем

После завершения первоначального развертывания функции мы можем рассмотреть следующие улучшения:

  • Возможность настройки ключа доступа при создании учетной записи
  • Использование ключей доступа при подтверждении важных действий (в настоящее время поддерживается на вкладке «Безопасность» в настройках пользователя, но не на некоторых экранах, доступных только администраторам)
  • Возможность полного отказа от паролей (на уровне пользователя или экземпляра?)
32 лайка

Это отличное дополнение! Однако преимущества безопасности можно легко обойти, войдя с помощью пароля. Я ожидал, что после ввода пароля меня всё равно попросят ввести ключ доступа, но система просто выполняет вход по паролю. Этого можно избежать, перерегистрировав ключи безопасности в отдельных настройках двухфакторной аутентификации, но это не очевидно и неудобно.

3 лайка

Спасибо, @Be0

В большинстве текущих реализаций ключи доступа пока не внедряются таким образом. Их рассматривают как отдельное от 2FA средство, см. этот отчёт о подходе YouTube. Однако, думаю, индустрия постепенно адаптируется в этом направлении.

Для реализации того, что вы ожидаете, необходимы два изменения:

шаг 1: разрешить использование ключей доступа в качестве 2FA (в настоящее время, как вы отметили, ключи безопасности нужно регистрировать отдельно)
шаг 2: требовать 2FA при входе по паролю, если пользователь добавил ключ доступа

Шаг 1 кажется мне логичным и не нарушает текущий процесс. Шаг 2 также имеет смысл, но он немного более нарушителен: если пользователь удалит ключ доступа из своего браузера (или не будет иметь его на конкретном устройстве), доступ будет заблокирован.

Тем не менее, считаю, что стоит изучить эту возможность.

7 лайков

Привет! При просмотре моего сайта Discourse с мобильного устройства (Firefox) ключи доступа не поддерживаются. Это ожидаемое поведение?

4 лайка

Полагаю, Firefox активно работает над внедрением поддержки ключей доступа повсеместно, но, если я правильно понимаю эту таблицу, до полной готовности ещё далеко.

В зависимости от вашей версии и операционной системы эта функция может быть ещё недоступна. Я только что провёл быстрое тестирование на macOS и iOS: для меня здесь, на meta.discourse.org, аутентификация с помощью ключей доступа была доступна и работала корректно.

5 лайков

Сообщение было перемещено в новую тему: Проблемы использования ключей доступа с vaultwarden

Если функция автозаполнения браузера по какой-то причине не предлагает ключ доступа, вы можете нажать кнопку «Войти с помощью ключа доступа».

3 лайка

Вы можете написать личное сообщение команде @team здесь или отправить письмо на адрес team@discourse.org, и мы отключим эту функцию для вас. Мы не рекомендуем этого делать: многие веб-сервисы переходят на ключи доступа как на более безопасный вариант аутентификации.

4 лайка

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

4 лайка

Да, я думаю, это было бы неплохо (и повысило бы безопасность аккаунта). Добавляю это сейчас в раздел «Возможные улучшения в будущем» в первом посте.

3 лайка

Это критически важно для безопасности ключей доступа. Если я не смогу отключить вход по паролю, они станут лишь небольшим удобством.

2 лайка

Если я правильно понимаю механизм ключей доступа, вам необходимо установить доверенный контейнер, например менеджер паролей, для хранения ключей доступа. Отказ от паролей предполагает, что все пользователи установили такой менеджер. Как тогда войдут пользователи, которые этого не сделали?

1 лайк

Точно так же, как люди, не использующие 2FA, не могут получить доступ к сайтам, требующим 2FA — они просто не могут.

К тому же, это не является реальной проблемой, поскольку Chrome, Safari, Windows, iPhone, Android, Yubi и другие служат альтернативами менеджерам паролей (которые вы, в любом случае, должны использовать в 2024 году), и все они поддерживают ключи доступа.

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

1 лайк

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

1 лайк

Есть ли какие-либо обновления относительно возможности создания учётной записи только с использованием ключей доступа (passkeys) и без пароля? Кажется, что поддержка ключей доступа почти бессмысленна, если всё равно требуется наличие пароля.

5 лайков

Возможно ли узнать, сколько (если есть) людей используют эту функцию?

Было бы хорошо, если бы её можно было отключить с помощью обычного параметра сайта.

1 лайк

Вы можете увидеть, сколько ключей доступа было создано, с помощью этой команды Rails:

UserSecurityKey.where(factor_type: 1).count
1 лайк

Спасибо. Извините за простой вопрос, но это то, что нужно ввести после следующего?

launcher enter app
rails c
2 лайка

Для собственной справки, на всякий случай, я выполнил:

  • cd /var/discourse
  • ./launcher enter app (без ./ выдавало ошибку «launcher: команда не найдена»)
  • rails c (подождал некоторое время)
  • SiteSetting.enable_passkeys = false
  • Control-D для выхода из консоли Rails
  • Exit для выхода из приложения

В итоге, как и ожидалось, опция использования ключа доступа исчезла. Спасибо.

1 лайк

Один пользователь создал ключ доступа.

Я получил user_id с помощью UserSecurityKey.where(factor_type: 1) и имя пользователя через Data Explorer.

Нужно ли что-то сделать, чтобы убедиться, что удаление опции ключей доступа ничего не сломает?

Будет ли пользователь разлогинен, или просто потеряет возможность входить с помощью ключа доступа после выхода из системы?

У пользователя уже есть обычный пароль, или хотя бы теперь он сможет его создать?

1 лайк