Не удается настроить ключ доступа ни в одном экземпляре Discourse

Когда я использую оборудование, которое мне не принадлежит, я хочу использовать аппаратный ключ вместо ввода пароля. Для этой цели у меня есть Nitrokey 3C.

Регистрация на Discourse не удаётся. То же самое происходит и здесь, на meta.discourse.org.

P.S. Регистрация ключа в качестве второго фактора прошла успешно в Linux (Debian) + Chromium, но при попытке входа это не работает.

Какой браузер вы используете?

Какое сообщение об ошибке вы получаете?

Есть ли какие-либо дополнительные сведения в консоли разработчика?

Это происходит в Chromium на Debian (то же самое в Firefox на Ubuntu; также в Firefox Nightly (snap) на Debian).

После нажатия кнопки на клавиатуре появляется сообщение:

«Процесс регистрации ключа доступа либо истек по времени, был отменен или не разрешен».

Сообщение об ошибке не помогает; в консоли ничего особенного нет.

Запрос к https://meta.discourse.org/u/register_passkey.json возвращает HTTP 500 с телом {“status”:500,“error”:“Internal Server Error”}.

Поможет ли предоставить данные запроса?

id=owBYLgKCahnu_YBKKDAaTdK7LOlDFzwJ9kJPvXfntmdfbyOzs35ddeOM0KnNqHiu6bwBTLu17fF2A7QkNfCE5wJQPdOrG5MIB-9Hek6KoX4wcA
rawId=owBYLgKCahnu/YBKKDAaTdK7LOlDFzwJ9kJPvXfntmdfbyOzs35ddeOM0KnNqHiu6bwBTLu17fF2A7QkNfCE5wJQPdOrG5MIB+9Hek6KoX4wcA==
type=public-key
attestation=o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YVjB06zu7aykTbz9dy22doBbDg8EboPkWBAWR4JLQn8z1TTFAAAAewAAAAAAAAAAAAAAAAAAAAAAUqMAWC4CgmoZ7v2ASigwGk3SuyzpQxc8CfZCT71357ZnX28js7N+XXXjjNCpzah4rum8AUy7te3xdgO0JDXwhOcCUD3TqxuTCAfvR3pOiqF+MHCkAQEDJyAGIVggy/MDuHan5fRjuKIQp7zkGku7P6p/8s2B4kfectFHcF6ha2htYWMtc2VjcmV09A==
clientData=eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiTmpRMVpUazJaVE00WlRRNE1UZGxOamd3TVdJNE5XVm1ZV1F5TkRObE1EVmlZek0zTURkbU1qZzJPR1V6TnpRd05HUmxZamRrTVdRMk1tWTEiLCJvcmlnaW4iOiJodHRwczovL21ldGEuZGlzY291cnNlLm9yZyIsImNyb3NzT3JpZ2luIjpmYWxzZX0=
name=Main Passkey

Это работает на https://webauthn.io/?

да, регистрация и аутентификация

Я только что попытался зарегистрировать новый ключ U2F здесь, на Meta, и в консоли увидел эту ошибку, которая, вероятно, объясняет проблему:

NotAllowedError: Операция либо истекла по времени, либо не была разрешена.
  См.: https://www.w3.org/TR/webauthn-2/#sctn-privacy-considerations-client.

Я не понимаю описание ошибки на w3.org. Значит ли это, что реализация сломана? Я не вижу ошибки в консоли, так что могу ли я чем-то помочь?

Нам нужно будет это изучить — думаю, браузеры внедрили дополнительные требования (как указано в ссылке), с тех пор как мы впервые разработали это.

1 лайк

Спасибо @agr за выявление этой проблемы, я исправил её здесь:

Обновление вашего Discourse до последней версии должно решить проблему, но если вы всё ещё столкнётесь с какими-либо трудностями, пожалуйста, сообщите нам об этом.

2 лайка

Регистрация прошла успешно. Это было быстро :slight_smile:

Но при входе / auth.js я получаю ответ 500

1 лайк

Подтверждаю; я вижу:

NoMethodError (undefined method 'hash_function' for an instance of COSE::Algorithm::EdDSA)
 lib/discourse_webauthn/authentication_service.rb:99:in 'DiscourseWebauthn::AuthenticationService#authenticate_security_key'
 app/controllers/session_controller.rb:399:in 'SessionController#passkey_login'
 app/controllers/application_controller.rb:443:in 'block in ApplicationController#with_resolved_locale'
 app/controllers/application_controller.rb:443:in 'ApplicationController#with_resolved_locale'
 app/controllers/application_controller.rb:1089:in 'ApplicationController#ensure_dont_cache_page'
 lib/middleware/omniauth_bypass_middleware.rb:35:in 'Middleware::OmniauthBypassMiddleware#call'
 lib/middleware/crawler_hooks.rb:11:in 'Middleware::CrawlerHooks#call'
 lib/content_security_policy/middleware.rb:12:in 'ContentSecurityPolicy::Middleware#call'
 lib/middleware/anonymous_cache.rb:420:in 'Middleware::AnonymousCache#call'
 lib/middleware/csp_script_nonce_injector.rb:12:in 'Middleware::CspScriptNonceInjector#call'
 config/initializers/008-rack-cors.rb:26:in 'Discourse::Cors#call'
 lib/middleware/default_headers.rb:13:in 'Middleware::DefaultHeaders#call'
 config/initializers/100-quiet_logger.rb:20:in 'DiscourseRackQuietAssetsLogger#call'
 config/initializers/100-silence_logger.rb:29:in 'SilenceLogger#call'
 lib/middleware/enforce_hostname.rb:23:in 'Middleware::EnforceHostname#call'
 lib/middleware/request_tracker.rb:321:in 'Middleware::RequestTracker#call'
 lib/middleware/overload_protections.rb:22:in 'Middleware::OverloadProtections#call'
 lib/middleware/processing_request.rb:14:in 'Middleware::ProcessingRequest#call'

в логах, когда я пытаюсь использовать свой Solo 2

1 лайк

Спасибо, что проверили, @agr. Я только что отправил ещё одно исправление:

Надеюсь, проблем больше не будет :crossed_fingers:, но, пожалуйста, дайте знать, если вы всё ещё столкнётесь с какими-либо трудностями!

1 лайк

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

2 лайка

Эта тема была автоматически закрыта через 9 дней. Новые ответы больше не принимаются.