Probleme bei der Verwendung von Passkeys mit Vaultwarden

Ich bin Benutzer einer selbst gehosteten Discourse-Instanz. Ich sehe die Schaltfläche zum Hinzufügen von Passkeys. Wenn ich klicke, öffnet sich mein Vaultwarden-Plugin, um es hinzuzufügen, aber dann erhalte ich eine Meldung:

Der Passkey-Registrierungsprozess ist entweder abgelaufen, wurde abgebrochen oder ist nicht erlaubt.

Ich benutze Firefox und habe bereits Passkeys hinzugefügt, z. B. für GitHub. Es funktioniert also in Firefox mit Vaultwarden, aber aus irgendeinem Grund nicht in diesem speziellen Discourse-Forum. Ich habe die Administratoren darüber informiert, und sie sagten, es sei aktiviert (andernfalls würde ich die Schaltfläche zum Hinzufügen nicht sehen, oder?).

2 „Gefällt mir“

Hallo Jappe,

vielen Dank für deine Nachricht. Ich habe dies in ein separates Thema verschoben, da es sich um ein spezifisches Problem mit Vaultwarden handelt (die übrigens ein eigenes Discourse-Forum haben :tada: ).

Weißt du, ob dieses Problem nur mit der Vaultwarden-Erweiterung in Firefox auftritt? Hast du andere Browser ausprobiert?

Wenn ich das testen würde, müsste ich einen Vaultwarden-Server einrichten?

4 „Gefällt mir“

Ich denke, Vaultwarden und das Bitwarden Firefox-Plugin sind nicht das Problem, da die Passkey-Integration mit anderen Diensten wie GitHub funktioniert.
Ich kann diese spezifische Meldung auch in einer yml-Datei von Discourse finden, die auf einen not_allowed_error hinweist.

Ich weiß es nicht, eigentlich ist es die offizielle Bitwarden-Erweiterung für Firefox, aber ich benutze eine selbst gehostete Vaultwarden-Instanz.
Ich habe auch Firefox unter Fedora ausprobiert, das ursprüngliche Problem trat unter Firefox für Windows auf.
Ich werde es jetzt mit Google Chrome unter Windows testen.
Ok, es schlägt auch dort fehl, aber ich habe mir die Entwicklertools angesehen und Folgendes gefunden:

Firefox Konsolenausgabe
Content-Security-Policy: Die Einstellungen der Seite haben das Laden einer Ressource auf blob:https://dietpi.com/b23d5e0c-dc61-4df8-b71b-88c5cd7f271a blockiert ("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

Ziemlich dasselbe unter Chrome:

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

Also wahrscheinlich eine Server-Fehlkonfiguration?

Ja, oder einen Anbieter nutzen. Bitwarden selbst hat eine kostenlose Stufe für den persönlichen Gebrauch.
Ich kann bei Bedarf auch weitere Informationen und Tests bereitstellen.

1 „Gefällt mir“

Habe weitere Tests durchgeführt:
Ich klicke auf die Schaltfläche „Hinzufügen“, das Popup erscheint und zu diesem Zeitpunkt habe ich bereits den Fehler in der Konsole von der createPasskey-Funktion.

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

Und dann schlägt das eigentliche Hinzufügen zum Tresor fehl, da kein Passkey erstellt wurde.

Die erste Fehlermeldung aus dem vorherigen Beitrag hat wahrscheinlich nichts mit diesem Problem zu tun, sondern mit etwas CORS-Zeug auf dem Dietpi-Server. Die erste Fehlermeldung zu Content-Security-Policy stammt von der Dark-reader-Erweiterung)

1 „Gefällt mir“

Ja, aus den von Ihnen geposteten Protokollen ist die wichtigste Fehlermeldung diese:

Der Ursprung der Authentifizierungsanfrage stimmt nicht mit dem Serverursprung überein.

Die Registrierung von Passkeys und Sicherheitsschlüsseln prüft, ob die URL der Website, die die Registrierung vornimmt, zwischen Client (Browser) und Server übereinstimmt. Höchstwahrscheinlich gibt es bei dieser Instanz eine Diskrepanz, manchmal ist es http vs. https, manchmal sind es Proxys.

Das Erste, was ich überprüfen würde, ist, ob die Website-Einstellung force https aktiviert ist.

2 „Gefällt mir“

Außerdem, @JappeHallunken, nur um allgemeine Probleme auszuschließen … kannst du hier auf Meta einen Passkey zu deinem Konto hinzufügen?

1 „Gefällt mir“

Ja, ich konnte hier auf Meta erfolgreich einen Passkey hinzufügen.

Ich werde das weitergeben! Danke für deine Hilfe.

Unser erstes Problem war CSP, das blob:-Bildquellen nicht zuließ. Nun scheint tatsächlich eine Einstellung zu fehlen/ungültig zu sein, aber ich kann sie nicht finden:

[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

Aber ich schätze, du hast Recht und es ist nur ein Symptom des 401.

HTTPS wird bereits über den Cloudflare-Proxy und die Webserver-Umleitung sowie die Einstellung force https, HSTS, Preloading usw. erzwungen. Es gibt keine Möglichkeit, diese Discourse-Instanz jemals über einfaches HTTP aufzurufen :wink:.

Ein Problem könnte sein, dass Discourse unter dem Unterpfad /forum und nicht unter dem Stammverzeichnis der Domain liegt?

3 „Gefällt mir“

Ich glaube, Sie haben Recht, das Problem scheint mit der Subfoder-Einrichtung zusammenzuhängen. Ich werde mir den Code gleich genauer ansehen.

3 „Gefällt mir“

Ich habe gerade FIX: Webauthn origin was incorrect for subfolder setups (#25651) · discourse/discourse@021a02c · GitHub gemerged, @MichaIng, kannst du deine Seite neu bauen und sehen, ob das das Problem behebt?

2 „Gefällt mir“

Erledigt. @JappeHallunken kannst du es nochmal versuchen?

3 „Gefällt mir“

Ja, es funktioniert jetzt, super!
Danke an alle für die Lösung!

2 „Gefällt mir“

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