أنا مستخدم لمثيل Discourse مستضاف ذاتيًا، أرى الزر لإضافة مفاتيح المرور. عندما أنقر، يفتح ملحق Vaultwarden الخاص بي لإضافته، ثم أتلقى رسالة:
انتهت مهلة عملية تسجيل مفتاح المرور، أو تم إلغاؤها، أو غير مسموح بها."
أنا أستخدم Firefox وقد أضفت بالفعل مفاتيح المرور، على سبيل المثال لـ GitHub، لذا فهي تعمل على Firefox مع Vaultwarden ولكن لسبب ما ليست في هذا المنتدى المحدد من Discourse. أخبرت المسؤولين بذلك وقالوا إنه ممكّن (وإلا فلن أرى زر الإضافة، أليس كذلك؟)
أعتقد أن vaultwarden وإضافة Firefox لـ Bitwarden ليستا المشكلة، حيث أن تكامل المفاتيح السحرية يعمل مع خدمات أخرى مثل GitHub.
يمكنني أيضًا العثور على هذه الرسالة المحددة في ملف yml لـ discourse، مما يشير إلى not_allowed_error.
لا أعرف، في الواقع إنها إضافة Bitwarden الرسمية لـ Firefox، لكنني أستخدم نسخة Vaultwarden مستضافة ذاتيًا.
لقد جربت أيضًا Firefox على Fedora، وقد حدثت المشكلة الأولية على Firefox لنظام Windows.
سأقوم بالاختبار الآن باستخدام Google Chrome على نظام Windows.
حسنًا، فشل الأمر هناك أيضًا، لكنني نظرت إلى أدوات المطور ووجدت هذا:
إخراج وحدة تحكم Firefox
Content-Security-Policy: The page's settings blocked the loading of a resource at 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
نفس الشيء تقريبًا على Chrome:
Failed to load resource: the server responded with a status of 401 ()
chunk.6d10396b901f5b95b67e.d41d8cd9.js:1 Object
إذًا ربما خطأ في تكوين الخادم؟
نعم، أو استخدم مزود خدمة. Bitwarden نفسه لديه طبقة مجانية للاستخدام الشخصي.
يمكنني أيضًا تقديم المزيد من المعلومات والاختبار إذا لزم الأمر.
ثم تفشل عملية الإضافة الفعلية إلى الخزنة، لأنه لم يتم إنشاء أي مفتاح مرور.
رسالة الخطأ الأولى من المنشور السابق ربما لا تتعلق بهذه المشكلة، بل ببعض مشاكل CORS على خادم dietpi. رسالة الخطأ الأولى حول Content-Security-Policy نشأت من إضافة Dark-reader)
نعم، من السجلات التي نشرتها، رسالة الخطأ الرئيسية هي:
مصدر طلب المصادقة لا يتطابق مع مصدر الخادم.
تسجيل الدخول باستخدام المفتاح السري والمفتاح الأمني يتحقق من أن عنوان URL للموقع الذي يقوم بالتسجيل يتطابق بين العميل (المتصفح) والخادم. على الأرجح أن هذا المثيل به عدم تطابق، وأحيانًا يكون http مقابل https، وأحيانًا أخرى يكون وكلاء.
أول شيء سأتحقق منه هو ما إذا كان إعداد الموقع force https ممكّنًا.
كانت المشكلة الأولى من جانبنا هي CSP، التي لم تسمح بمصادر صور blob:. الآن يبدو بالفعل أن هناك بعض الإعدادات المفقودة/غير الصالحة، ولكن لا يمكنني العثور عليها:
[AdminSidebar] يجب أن يكون لرابط `root_admin_additional_root_admin_upgrade` المخصص تسمية I18n صالحة، تم الحصول على `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
لكنني أعتقد أنك على حق وأنها مجرد عرض لـ 401.
يتم فرض HTTPS بالفعل عبر وكيل Cloudflare وإعادة توجيه خادم الويب وإعداد force https، و HSTS، والتحميل المسبق، وما إلى ذلك، لا توجد طريقة للوصول إلى مثيل Discourse هذا عبر HTTP عادي .
قد تكون المشكلة أن Discourse موجود في المسار الفرعي /forum، بدلاً من جذر النطاق؟