Impossible de configurer une clé d'accès sur aucun discourse

Lorsque j’utilise du matériel que je ne possède pas, je souhaite utiliser une clé matérielle au lieu de saisir mon mot de passe. J’ai obtenu une Nitrokey 3C à cette fin.

L’enregistrement sur Discourse échoue. Également ici sur meta.discourse.org.

p.s. L’enregistrement de la clé comme deuxième facteur a fonctionné sous Linux (Debian) + Chromium, mais pas lorsque j’essaie de me connecter.

Quel navigateur utilisez-vous ?

Quel est le message d’erreur que vous obtenez ?

Y a-t-il des détails supplémentaires dans la console de développement ?

ceci est sur debian chromium (et sur ubuntu firefox c’est la même chose ; c’est aussi la même chose sur firefox nightly (snap) sur debian)

Après avoir appuyé sur le bouton de la clé

« Le processus d’enregistrement de la passkey a expiré, a été annulé ou n’est pas autorisé. »

L’erreur n’est pas utile ; rien de spécial dans la console.

La requête à https://meta.discourse.org/u/register_passkey.json renvoie http 500 avec la charge utile {"status":500,"error":"Internal Server Error"}.

Les données de la requête seraient-elles utiles ?

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

Est-ce que cela fonctionne sur https://webauthn.io/ ?

oui, inscription et authentification

J’essaie d’enregistrer une nouvelle clé U2F ici sur meta et je vois cette erreur dans la console, ce qui l’explique probablement :

NotAllowedError: The operation either timed out or was not allowed.
  See: https://www.w3.org/TR/webauthn-2/#sctn-privacy-considerations-client.

Je ne saisis pas la description de l’erreur sur w3.org ; l’implémentation est-elle donc défectueuse ? Je ne semble pas obtenir l’erreur dans la console, puis-je contribuer à quelque chose ?

Nous devrons examiner cela - je pense que les navigateurs ont mis en œuvre des exigences supplémentaires (comme indiqué dans le lien) depuis que nous avons développé ceci pour la première fois.

1 « J'aime »

Merci @agr d’avoir identifié ce problème, j’ai publié un correctif ici :

La mise à jour de votre Discourse vers la dernière version devrait maintenant résoudre le problème, mais si vous rencontrez toujours des difficultés, veuillez nous en informer.

2 « J'aime »

L’inscription a fonctionné correctement. C’était rapide :slight_smile:

Mais login / auth.js me donne une réponse 500

1 « J'aime »

Confirmé ; je vois :

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'

dans les journaux lorsque j’essaie d’utiliser mon Solo 2

1 « J'aime »

Merci d’avoir vérifié cela @agr, je viens de pousser un autre correctif :

J’espère qu’il n’y aura plus de problèmes :crossed_fingers:, mais n’hésitez pas à me faire savoir si vous rencontrez toujours des problèmes !