agr
(Agr)
Mars 4, 2026, 6:14
1
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 ?
agr
(Agr)
Mars 4, 2026, 8:04
3
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/ ?
agr
(Agr)
Mars 4, 2026, 9:28
6
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.
agr
(Agr)
Mars 4, 2026, 9:56
9
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 »
keegan
(Keegan George)
Mars 5, 2026, 5:53
18
Merci @agr d’avoir identifié ce problème, j’ai publié un correctif ici :
main ← fix-hardware-passkeys
approved 05:50PM - 05 Mar 26 UTC
**Currently, passkey registration has two bugs:**
1. Registration fails with … an HTTP 500 for authenticators that include extension data (i.e. `hmac-secret` in their attestation response) because we slice all bytes after the credential ID the public key.
2. Registration fails with `NotAllowedError` on some hardware keys (i.e. Solo 2) because `pubKeyCredParams` includes invalid HMAC symmetric algorithms from the `COSE` gem, which strict authenticator firmware rejects.
**This fix:**
1. Uses `CBOR::Unpacker` streaming decode to read exactly one `CBOR` object from the byte stream, stopping before any trailing extension data. Also adds `COSE::MalformedKeyError` to the rescue block so future failures return a proper error response.
2. Replaces the blanket `COSE::Algorithm.registered_algorithm_ids` with an explicit list of asymmetric signature algorithms valid for `WebAuthn`.
Meta bug report: https://meta.discourse.org/t/cant-set-up-passkey-on-any-discourse/397642/
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 »
agr
(Agr)
Mars 5, 2026, 8:08
20
L’inscription a fonctionné correctement. C’était rapide
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 »
keegan
(Keegan George)
Mars 6, 2026, 9:53
25
Merci d’avoir vérifié cela @agr , je viens de pousser un autre correctif :
main ← fix-passkey-eddsa-login-auth
merged 09:51PM - 06 Mar 26 UTC
**Previously**, passkey authentication called `cose_algorithm.hash_function` to … verify signatures, but `COSE::Algorithm::EdDSA` does not implement `hash_function` (EdDSA has the hash built into the algorithm). This caused a `NoMethodError 500` for any user who registered a passkey with an EdDSA-based authenticator.
**This commit** uses the COSE gem's own `cose_algorithm.verify` method, which correctly dispatches signature verification for all algorithm types — including EdDSA, which passes nil as the digest internally.
J’espère qu’il n’y aura plus de problèmes , mais n’hésitez pas à me faire savoir si vous rencontrez toujours des problèmes !