Я пользуюсь собственным экземпляром Discourse и вижу кнопку для добавления ключей доступа. При нажатии открывается плагин Vaultwarden для добавления, но затем появляется сообщение:
Процесс регистрации ключа доступа либо истёк по времени, либо был отменён, либо не разрешён.
Я использую Firefox и уже добавил ключи доступа, например для GitHub, так что в Firefox с Vaultwarden всё работает, но по какой-то причине не работает в этом конкретном форуме Discourse. Я сообщил об этом администраторам, и они сказали, что функция включена (иначе я бы не увидел кнопку добавления, верно?)
Я думаю, что Vaultwarden и расширение Bitwarden для Firefox не являются проблемой, поскольку интеграция с ключами доступа работает с другими сервисами, например GitHub.
Я также нашел это конкретное сообщение в одном из yml-файлов проекта Discourse, что указывает на not_allowed_error.
На самом деле я не знаю. Я использую официальное расширение Bitwarden для Firefox, но подключено к самодостаточному экземпляру Vaultwarden.
Я также пробовал Firefox на Fedora; первоначальная проблема возникла в Firefox для Windows.
Сейчас я протестирую Google Chrome на Windows.
Хорошо, там тоже происходит сбой, но я посмотрел в инструменты разработчика и обнаружил следующее:
Вывод консоли Firefox
Content-Security-Policy: Настройки страницы заблокировали загрузку ресурса по адресу 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 есть бесплатный тариф для личного использования.
Если потребуется, я также могу предоставить дополнительную информацию и провести тестирование.
Провёл дополнительное тестирование:
Я нажимаю кнопку «Добавить», появляется всплывающее окно, и в этот момент в консоли уже отображается ошибка от функции createPasskey.
Затем фактическое добавление в хранилище не удаётся, так как ключ доступа не был создан.
{del}Первое сообщение об ошибке из предыдущего поста, вероятно, не связано с этой проблемой, а вызвано настройками CORS на сервере dietpi.{/del} Первое сообщение об ошибке, касающееся Content-Security-Policy, возникло из-за расширения Dark-reader.
Да, исходя из предоставленных вами логов, основное сообщение об ошибке звучит так:
Источник запроса аутентификации не совпадает с источником сервера.
При регистрации Passkey и ключей безопасности проверяется, совпадает ли URL сайта, выполняющего регистрацию, между клиентом (браузером) и сервером. Скорее всего, в вашем случае есть несовпадение: иногда это различие между http и https, в других случаях — проблема с прокси.
Первое, что я бы порекомендовал проверить, — включена ли настройка сайта force https.
Первая проблема на нашей стороне была связана с CSP, которая не позволяла использовать источники изображений blob:. Теперь действительно кажется, что какое-то настройка отсутствует или некорректна, но я не могу её найти:
Но, полагаю, вы правы, и это лишь симптом ошибки 401.
HTTPS уже принудительно включён через прокси Cloudflare и перенаправление веб-сервера, а также настройку force https, HSTS, предзагрузку и т. д. Нет никакой возможности получить доступ к этому экземпляру Discourse по обычному HTTP .
Проблема может заключаться в том, что Discourse размещён по подпутью /forum, а не в корне домена?