Problemi nell'usare passkeys con vaultwarden

Sono un utente di un’istanza Discourse self-hosted, vedo il pulsante per aggiungere le passkey. Quando clicco, il mio plugin Vaultwarden si apre per aggiungerla, ma poi ricevo un messaggio:

Il processo di registrazione della passkey è scaduto, è stato annullato o non è consentito.

Sono su Firefox e ho già aggiunto passkey, ad esempio per GitHub, quindi funziona su Firefox con Vaultwarden, ma per qualche motivo non su questo particolare forum Discourse. L’ho detto agli amministratori e loro hanno detto che è abilitato (altrimenti non vedrei il pulsante Aggiungi, giusto?)

2 Mi Piace

Ciao Jappe,

Grazie per averci scritto. Ho spostato questo in un argomento separato poiché si tratta di un problema specifico con Vaultwarden (che tra l’altro ha il suo forum Discourse :tada: ).

Sai se questo problema si verifica solo con l’estensione Vaultwarden su Firefox? Hai provato altri browser?

Se dovessi testare questo, avrei bisogno di configurare un server Vaultwarden?

4 Mi Piace

Penso che vaultwarden e il plugin Firefox di Bitwarden non siano il problema, poiché l’integrazione delle passkey funziona con altri servizi come GitHub.
Posso anche trovare questo messaggio specifico in un file yml di discourse, che indica un not_allowed_error.

Non lo so, in realtà è l’estensione ufficiale di Bitwarden per Firefox, ma uso un’istanza Vaultwarden self-hosted.
Ho provato anche Firefox su Fedora, il problema iniziale si è verificato su Firefox per Windows.
Ora proverò con Google Chrome su Windows.
Ok, anche lì fallisce, ma ho dato un’occhiata agli strumenti per sviluppatori e ho trovato questo:

Output della console di Firefox
Content-Security-Policy: Le impostazioni della pagina hanno bloccato il caricamento di una risorsa su blob:https://dietpi.com/b23d5e0c-dc61-4df8-b71b-88c5cd7f271a ("img-src").


Object { jqXHR: {…}, textStatus: "error", errorThrown: "" }
errorThrown: ""
jqXHR: Object { readyState: 4, getResponseHeader: getResponseHeader(e), getAllResponseHeaders: getAllResponseHeaders(), … }
abort: function abort(e)
always: function always()
catch: function catch(e)
done: function add()
fail: function add()
getAllResponseHeaders: function getAllResponseHeaders()
getResponseHeader: function getResponseHeader(e)
jqTextStatus: "error"
overrideMimeType: function overrideMimeType(e)
pipe: function pipe()
progress: function add()
promise: function promise(e)
readyState: 4
requestedUrl: "/forum/u/register_passkey.json"
responseJSON: Object { errors: (1) […] }
responseText: '{"errors":["The origin of the authentication request does not match the server origin."]}'
setRequestHeader: function setRequestHeader(e, t)
state: function state()
status: 401
statusCode: function statusCode(e)
statusText: "error"
then: function then(e, n, i)
<prototype>: Object { … }
textStatus: "error"
<prototype>: Object { … }
__defineGetter__: function __defineGetter__()
__defineSetter__: function __defineSetter__()
__lookupGetter__: function __lookupGetter__()
__lookupSetter__: function __lookupSetter__()
__proto__:
constructor: function Object()
hasOwnProperty: function hasOwnProperty()
isPrototypeOf: function isPrototypeOf()
propertyIsEnumerable: function propertyIsEnumerable()
toLocaleString: function toLocaleString()
toString: function toString()
valueOf: function valueOf()
<get __proto__()>: function __proto__()
<set __proto__()>: function __proto__()
chunk.6d10396b901f5b95b67e.d41d8cd9.js:1:2114375
    createPasskey https://dietpi.com/forum/assets/chunk.6d10396b901f5b95b67e.d41d8cd9.js:1

Praticamente lo stesso su Chrome:

Failed to load resource: the server responded with a status of 401 ()
chunk.6d10396b901f5b95b67e.d41d8cd9.js:1 Object

Quindi probabilmente una errata configurazione del server?

Sì, o usare un provider. Bitwarden stesso ha un piano gratuito per uso personale.
Posso fornire ulteriori informazioni e testare se necessario.

1 Mi Piace

Ho fatto altri test:
Clicco sul pulsante “Aggiungi”, appare il popup e a questo punto ho già l’errore nella console dalla funzione createPasskey.

Object { jqXHR: {…}, textStatus: "error", errorThrown: "" }
chunk.6d10396b901f5b95b67e.d41d8cd9.js:1:2114375
    createPasskey https://dietpi.com/forum/assets/chunk.6d10396b901f5b95b67e.d41d8cd9.js:1

E poi l’effettivo aggiunta al vault fallisce, perché non è stata creata alcuna passkey.

Il primo messaggio di errore dal post precedente probabilmente non è correlato a questo problema, ma a qualche problema CORS sul server DietPi. Il primo messaggio di errore su Content-Security-Policy proveniva dall’estensione Dark Reader)

1 Mi Piace

Sì, dai log che hai pubblicato, il messaggio di errore principale è questo:

L’origine della richiesta di autenticazione non corrisponde all’origine del server.

La registrazione delle passkey e delle chiavi di sicurezza verifica che l’URL del sito che effettua la registrazione corrisponda tra client (browser) e server. Molto probabilmente questa istanza presenta una discrepanza, a volte è http vs https, altre volte sono i proxy.

La prima cosa da controllare è se l’impostazione del sito force https è abilitata.

2 Mi Piace

Inoltre, @JappeHallunken, solo per escludere eventuali problemi generali… puoi aggiungere una passkey al tuo account qui su meta?

1 Mi Piace

Sì, ho potuto aggiungere con successo una passkey qui su meta.

Riporterò questo! Grazie per il tuo aiuto.

Il primo problema da parte nostra è stato CSP, che non consentiva sorgenti di immagini blob:. Ora, in effetti, sembra mancare/essere non valida qualche impostazione, ma non riesco a trovarla:

[AdminSidebar] Custom link root_admin_additional_root_admin_upgrade must have a valid I18n label, got admin.docker.upgrade_tab chunk.6d10396b901f5b95b67e.d41d8cd9.js:1:2588880

Object { jqXHR: {…}, textStatus: "error", errorThrown: "" }
errorThrown: ""
jqXHR: Object { readyState: 4, getResponseHeader: getResponseHeader(e), getAllResponseHeaders: getAllResponseHeaders()
, … }
textStatus: "error"
<prototype>: Object { … }
chunk.6d10396b901f5b95b67e.d41d8cd9.js:1:2114375
    createPasskey https://dietpi.com/forum/assets/chunk.6d10396b901f5b95b67e.d41d8cd9.js:1

Ma immagino che tu abbia ragione e sia solo un sintomo del 401.

HTTPS è già imposto tramite proxy Cloudflare e reindirizzamento del webserver, oltre all’impostazione force https, HSTS, preloading, ecc., non c’è modo di accedere a questa istanza di Discourse tramite HTTP semplice :wink:.

Un problema potrebbe essere che Discourse si trova nel sotto-percorso /forum, invece che alla radice del dominio?

3 Mi Piace

Penso che tu possa avere ragione, il problema sembra essere correlato all’impostazione della sottocartella. Darò un’occhiata più da vicino al codice a breve.

3 Mi Piace

Ho appena unito FIX: Webauthn origin was incorrect for subfolder setups (#25651) · discourse/discourse@021a02c · GitHub, @MichaIng, puoi dare alla tua installazione una ricostruzione e vedere se questo risolve il problema?

2 Mi Piace

Fatto. @JappeHallunken puoi riprovare?

3 Mi Piace

Sì, ora funziona, bene!
Grazie a tutti per aver risolto questo problema!

2 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.