Поддержка входа без пароля с помощью Passkeys

:wave: Привет, меня зовут Томас Каннон, я один из ведущих мейнтейнеров организации Ruby passkeys!

Уже созданы некоторые библиотеки для решения этой задачи, но нам крайне нужны мейнтейнеры. Ниже приведены соответствующие ссылки:

Мы очень хотим помочь как можем и объединить усилия, чтобы сделать passkeys стандартом во всей Ruby-экосистеме :flexed_biceps:

8 лайков

Привет, Томас,

В Discourse уже встроена собственная система аутентификации, основанная на WebAuthn для двухфакторной аутентификации (2FA). На мой взгляд, единственное существенное упущение сейчас — это то, что мы пока не позволяем использовать 2FA как единственный фактор (опционально).

Я заметил, что Google тоже полностью перешли на этот подход (начиная с вчерашнего дня): Passkeys: What they are and how to use them

Я очень надеюсь сделать такую возможность доступной и в Discourse. Я действительно ненавижу пароли, и комбинация 2FA с проверочным вопросом кажется мне внутренне более надёжной, чем пароли, без сомнения.

7 лайков

Отлично! Как я могу лучше всего помочь?

2 лайка

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

2 лайка

Я могу попробовать! Никаких гарантий, так что если кто-то хочет опередить меня за обедом — вперёд!

5 лайков

Небольшое обновление: поддержка ключей доступа в Discourse скоро появится. Я работал над этим в последние несколько недель, и у нас уже есть несколько черновых PR. Смотрите #23586, #23587 и #23591.

Я думаю, что примерно через 3–4 недели мы сможем объединить эти изменения (с включённой по умолчанию настройкой сайта). А если добавить ещё несколько недель на тестирование и исправление ошибок, то, вероятно, мы сможем вывести эту функцию в продакшн примерно через два месяца. Следите за новостями!

10 лайков

Привет! Есть ли что-то новое о passkeys в Discourse?

2 лайка

Похоже, что финальный PR по этой теме был слит неделю назад, а название настройки сайта в настоящее время — experimental_passkeys (сейчас это скрытая настройка). [DEV: Routes and controller actions for passkeys · discourse/discourse@e415394 · GitHub]

1 лайк

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

cd /var/discourse
./launcher enter app
rails c
SiteSetting.experimental_passkeys=true

После включения, как кажется, вам нужно просто открыть https://forum.example.com/my/preferences/security, добавить ключ доступа, затем выйти из системы и использовать опцию «Войти с помощью ключа доступа», чтобы войти снова.

3 лайка

Привет, друзья! Да, мы объединили несколько PR с поддержкой ключей доступа и уже тестируем их внутренне.

Приведённые выше шаги верны, если вы хотите стать одним из самых ранних тестировщиков этой функции. Однако мы всё ещё дорабатываем несколько деталей, и официальное обновление/объявление скоро появится.

9 лайков

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

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

7 лайков

Я протестировал это на рабочем столе (Windows 11, Chrome), и всё работает идеально! :+1:

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


Я также протестировал на Android (10) в Chrome и приложении. Всё работает хорошо, однако:

  • Прикосновение к полю ввода вызывает модальное окно с ключом доступа.
    • Если проигнорировать это и коснуться поля снова, можно начать вводить текст.
  • Прикосновение к кнопке ничего не делает (кроме её выделения и закрытия клавиатуры).


(ура, работает с задержками, не знаю почему)

5 лайков

Спасибо за отчет, @Arkshine. Я забыл включить небольшое изменение в мобильный компонент в коммите двухдневной давности. Это довольно неловкая ошибка — кнопка ничего не делала на всех мобильных устройствах.

В любом случае, это уже исправлено. Я только что протестировал на своём Android, и у вас всё должно работать.

2 лайка

Да, теперь всё работает, спасибо! :smile:

2 лайка

Похоже, что систему ChromeOS нельзя использовать в качестве ключа доступа в Discourse (хотя на других сайтах это возможно). Это сделано намеренно?

Мы не блокируем это конкретно. Что именно подразумевается под «системой ChromeOS» — это Chrome на ChromeOS? Можете ли вы указать версию браузера и операционной системы?

Да.

Конечно.
Из chrome://version:

Ключ Значение
Google Chrome 118.0.5993.86 (Официальная сборка) (64-бит)
Ревизия d9a55e23605b9c433d369a305c71114843ec754d-refs/branch-heads/5993@{#1287}
Платформа 15604.45.0 (Официальная сборка) стабильный канал octopus
User Agent Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36

Этой информации достаточно?

Вот что происходит, когда я пытаюсь добавить ключ доступа с этого компьютера (я выбираю опцию «Это устройство» в первом меню):


1 лайк

Ах, интересно, спасибо за скриншот. Я подозреваю, что устройство не поддерживает проверку подлинности пользователя? Можете ли вы использовать Touch ID, Face ID или PIN-код для разблокировки устройства?

Согласно этой странице, поддержка Chrome OS действительно неравномерна.

1 лайк

Думаю, поддерживает.

Я использую пароль. Стоит отметить, что я могу добавить это устройство в качестве метода двухфакторной аутентификации для аккаунта через WebAuthn, но не могу добавить его в качестве ключа доступа.

1 лайк