どのDiscourseでもパスキーを設定できません

所有していないハードウェアを使用する場合、パスワードの代わりにハードウェアキーを使用したいと考えています。その目的でNitrokey 3Cを入手しました。

Discourseでの登録が失敗します。ここmeta.discourse.orgでも同様です。

追伸:セカンドファクターとしてキーを登録することは、Linux(Debian)+ Chromiumでは機能しましたが、ログインしようとすると機能しません。

お使いのブラウザは何ですか?

どのようなエラーが表示されますか?

開発者コンソールに何か追加の詳細情報はありますか?

Debian の Chromium (また、Ubuntu の Firefox、Debian の Firefox Nightly (snap) でも同様) で発生しています。

キー上のボタンを押した後

「パスキーの登録プロセスがタイムアウトしたか、キャンセルされたか、許可されていません。」

というエラーが表示されますが、これは役に立たず、コンソールにも特別なものは何も表示されません。

https://meta.discourse.org/u/register_passkey.json へのリクエストは、ペイロードが {"status":500,"error":"Internal Server Error"} の HTTP 500 を返します。

リクエストデータは役立ちますか?

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 キーを登録しようとしたところ、コンソールに次のエラーが表示されました。これが原因だと思われます。

NotAllowedError: The operation either timed out or was not allowed.
  See: 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: