Não consigo configurar a chave de acesso em nenhum discourse

Ao usar um hardware que não possuo, quero usar uma chave de hardware em vez de inserir minha senha. Adquiri uma Nitrokey 3C para esse fim.

O registro no Discourse falha. Também aqui em meta.discourse.org.

p.s. Registrar a chave como segundo fator funcionou em um Linux (Debian) + Chromium, mas não quando tento fazer login.

Qual navegador você está usando?

Qual é o erro que você recebe?

Existem detalhes adicionais no console do desenvolvedor?

isso ocorre no chromium do debian (e no firefox do ubuntu o mesmo; também o mesmo no firefox nightly (snap) no debian)

Após pressionar o botão na chave

‘O processo de registro da chave de acesso expirou, foi cancelado ou não é permitido.’

O erro não é útil; nada de especial no console.

A solicitação para https://meta.discourse.org/u/register_passkey.json retorna http 500 com o payload {"status":500,"error":"Internal Server Error"}.

Os dados da solicitação ajudariam?

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

Funciona em https://webauthn.io/?

sim, registrando e autenticando

Acabei de tentar registrar uma nova chave U2F aqui no meta e estou vendo este erro no console, o que provavelmente explica:

NotAllowedError: A operação expirou ou não foi permitida.
  Veja: https://www.w3.org/TR/webauthn-2/#sctn-privacy-considerations-client.

Não entendi a descrição do erro em w3.org; então a implementação está quebrada? Eu não pareço obter o erro no console, então há algo que eu possa contribuir?

Precisaremos analisar isso - acho que os navegadores implementaram requisitos adicionais (conforme observado no link) desde que desenvolvemos isso pela primeira vez.

1 curtida

Obrigado @agr por identificar este problema, publiquei uma correção aqui:

Atualizar seu Discourse para a versão mais recente deve resolver o problema, mas se você ainda encontrar algum problema, por favor, nos avise

2 curtidas

O registro funcionou bem. Foi rápido :slight_smile:

Mas o login / auth.js me dá uma resposta 500

1 curtida

Confirmado; eu vejo:

NoMethodError (método 'hash_function' indefinido para uma instância de 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'

nos logs quando tento usar meu Solo 2

1 curtida

Obrigado por verificar isso @agr, acabei de enviar outra correção:

Espero que não haja mais problemas :crossed_fingers:, mas por favor me avise se você ainda encontrar algum problema!