Продолжая обсуждение в 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).
После завершения первоначального развертывания функции мы можем рассмотреть следующие улучшения:
Возможность настройки ключа доступа при создании учетной записи
Использование ключей доступа при подтверждении важных действий (в настоящее время поддерживается на вкладке «Безопасность» в настройках пользователя, но не на некоторых экранах, доступных только администраторам)
Возможность полного отказа от паролей (на уровне пользователя или экземпляра?)
Это отличное дополнение! Однако преимущества безопасности можно легко обойти, войдя с помощью пароля. Я ожидал, что после ввода пароля меня всё равно попросят ввести ключ доступа, но система просто выполняет вход по паролю. Этого можно избежать, перерегистрировав ключи безопасности в отдельных настройках двухфакторной аутентификации, но это не очевидно и неудобно.
В большинстве текущих реализаций ключи доступа пока не внедряются таким образом. Их рассматривают как отдельное от 2FA средство, см. этот отчёт о подходе YouTube. Однако, думаю, индустрия постепенно адаптируется в этом направлении.
Для реализации того, что вы ожидаете, необходимы два изменения:
шаг 1: разрешить использование ключей доступа в качестве 2FA (в настоящее время, как вы отметили, ключи безопасности нужно регистрировать отдельно)
шаг 2: требовать 2FA при входе по паролю, если пользователь добавил ключ доступа
Шаг 1 кажется мне логичным и не нарушает текущий процесс. Шаг 2 также имеет смысл, но он немного более нарушителен: если пользователь удалит ключ доступа из своего браузера (или не будет иметь его на конкретном устройстве), доступ будет заблокирован.
Тем не менее, считаю, что стоит изучить эту возможность.
Полагаю, Firefox активно работает над внедрением поддержки ключей доступа повсеместно, но, если я правильно понимаю эту таблицу, до полной готовности ещё далеко.
В зависимости от вашей версии и операционной системы эта функция может быть ещё недоступна. Я только что провёл быстрое тестирование на macOS и iOS: для меня здесь, на meta.discourse.org, аутентификация с помощью ключей доступа была доступна и работала корректно.
Вы можете написать личное сообщение команде @team здесь или отправить письмо на адрес team@discourse.org, и мы отключим эту функцию для вас. Мы не рекомендуем этого делать: многие веб-сервисы переходят на ключи доступа как на более безопасный вариант аутентификации.
В планах ли в будущем полностью отключить пароль (желательно на уровне настроек аккаунта; я вижу, что принуждение всех сайтов к этому может закончиться плохо)? Потому что наличие одновременно и пароля, и ключа доступа несколько ограничивает полезность ключа доступа. Можно частично решить это, создав невероятно сложный пароль и просто никогда его не используя, но это лишь уход от сути ключей доступа.
Если я правильно понимаю механизм ключей доступа, вам необходимо установить доверенный контейнер, например менеджер паролей, для хранения ключей доступа. Отказ от паролей предполагает, что все пользователи установили такой менеджер. Как тогда войдут пользователи, которые этого не сделали?
Точно так же, как люди, не использующие 2FA, не могут получить доступ к сайтам, требующим 2FA — они просто не могут.
К тому же, это не является реальной проблемой, поскольку Chrome, Safari, Windows, iPhone, Android, Yubi и другие служат альтернативами менеджерам паролей (которые вы, в любом случае, должны использовать в 2024 году), и все они поддерживают ключи доступа.
Я также не предлагал обязывать всех пользователей отказаться от паролей (хотя я не против этого), но если вы, пользователь ключа доступа, не можете отключить пароль, то ключ доступа теряет большую часть своей ценности, и вы всё равно остаётесь полностью уязвимыми для фишинга.
Если я выберу ключи доступа для Discourse, я больше не буду использовать свой пароль, так как же я могу стать жертвой фишинга? Я понимаю, что риск злонамеренных атак или атак методом подбора при входе по паролю останется, и ваше предложение отключать его для каждого пользователя отдельно верно, но разве это касается фишинга?
Есть ли какие-либо обновления относительно возможности создания учётной записи только с использованием ключей доступа (passkeys) и без пароля? Кажется, что поддержка ключей доступа почти бессмысленна, если всё равно требуется наличие пароля.