Je suis un utilisateur d’une instance Discourse auto-hébergée, je vois le bouton pour ajouter des passkeys. Lorsque je clique, mon plugin Vaultwarden s’ouvre pour l’ajouter, mais ensuite je reçois un message :
Le processus d’enregistrement de la passkey a expiré, a été annulé ou n’est pas autorisé.
Je suis sur Firefox et j’ai déjà ajouté des passkeys, par exemple pour GitHub, donc cela fonctionne sur Firefox avec Vaultwarden, mais pour une raison quelconque, pas sur ce forum Discourse particulier. J’en ai informé les administrateurs et ils ont dit que c’était activé (sinon je ne verrais pas le bouton d’ajout, n’est-ce pas ?)
Merci de nous avoir contactés. J’ai déplacé ceci dans un sujet distinct car il s’agit d’un problème spécifique à Vaultwarden (qui, soit dit en passant, a son propre forum Discourse ).
Savez-vous si ce problème ne se produit qu’avec l’extension Vaultwarden sur Firefox ? Avez-vous essayé d’autres navigateurs ?
Si je devais tester cela, aurais-je besoin de configurer un serveur Vaultwarden ?
Je pense que vaultwarden et le plugin Firefox bitwarden ne sont pas le problème, car l’intégration des passkeys fonctionne avec d’autres services comme GitHub.
Je peux également trouver ce message spécifique dans un fichier yml de discourse, qui indique une not_allowed_error.
Je ne sais pas, en fait c’est l’extension bitwarden officielle pour Firefox, mais j’utilise une instance Vaultwarden auto-hébergée.
J’ai aussi essayé Firefox sous Fedora, le problème initial est survenu sur Firefox pour Windows.
Je vais maintenant tester avec Google Chrome sous Windows.
Ok, ça échoue aussi là-bas, mais j’ai regardé dans les outils de développement et j’ai trouvé ceci :
Sortie de la console Firefox
Content-Security-Policy: Les paramètres de la page ont bloqué le chargement d'une ressource sur 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
À peu près la même chose sur Chrome :
Failed to load resource: the server responded with a status of 401 ()
chunk.6d10396b901f5b95b67e.d41d8cd9.js:1 Object
Donc probablement une mauvaise configuration du serveur ?
Oui, ou utiliser un fournisseur. Bitwarden lui-même a un niveau gratuit pour un usage personnel.
Je peux également fournir plus d’informations et de tests si nécessaire.
J’ai fait d’autres tests :
Je clique sur le bouton « Ajouter », la fenêtre contextuelle apparaît et à ce stade, j’ai déjà l’erreur dans la console de la fonction createPasskey.
Et ensuite, l’ajout réel au coffre-fort échoue, car aucune clé d’accès n’a été créée.
Le premier message d’erreur du post précédent n’est probablement pas lié à ce problème, mais à une histoire de CORS sur le serveur dietpi. Le premier message d’erreur concernant Content-Security-Policy provenait de l’extension Dark-reader)
Oui, d’après les journaux que vous avez publiés, le message d’erreur principal est le suivant :
L’origine de la demande d’authentification ne correspond pas à l’origine du serveur.
L’enregistrement des passkeys et des clés de sécurité vérifie que l’URL du site effectuant l’enregistrement correspond entre le client (navigateur) et le serveur. Très probablement, cette instance présente une discordance, parfois c’est http contre https, d’autres fois ce sont des proxys.
La première chose à vérifier est si le paramètre du site forcer https est activé.
Le premier problème de notre côté était CSP, qui n’autorisait pas les sources d’images blob:. Maintenant, il semble effectivement qu’un paramètre manque/soit invalide, mais je n’arrive pas à le trouver :
Mais je suppose que vous avez raison et que ce n’est qu’un symptôme du 401.
HTTPS est déjà appliqué via le proxy Cloudflare et la redirection du serveur web, ainsi que le paramètre force https, HSTS, preloading, etc. Il n’y a aucun moyen d’accéder à cette instance Discourse via HTTP simple .
Un problème pourrait être que Discourse se trouve dans le sous-chemin /forum, au lieu de la racine du domaine ?
Je pense que vous avez peut-être raison, le problème semble être lié à la configuration du sous-dossier. Je vais examiner le code de plus près sous peu.