Chrome Расширение добавления разрешений программно XMLHttpRequest был заблокирован политикой CORS - PullRequest
0 голосов
/ 04 мая 2020

У меня есть расширение chrome, которое обращается к локальному серверу и вызывает различные API. Адрес этого сервера зависит от установленного экземпляра и не может быть предсказан заранее. Чтобы справиться с этим, я добавил разрешение "permissions": ["*://*/*"] Это сработало. Однако одна пользовательская организация отклонила расширение из-за чрезмерных разрешений. Так что к следующей версии нужно обратиться. У меня есть рабочая версия, которая добавляет разрешение программно для хоста. У меня есть форма, которая запрашивает хост локального сервера, а затем добавляет этот сервер и связанный с ним повар ie, как это.

chrome.permissions.request(
    {
      origins: [url],
    },
    function (granted) {
      if (granted) {
        // The permissions have been granted.
        console.log("granted");
        chrome.cookies.get({ url: url, name: "CLM-CSRF-TOKEN" }, function (

Опять это работает. У меня сейчас проблема в том, что когда я звоню в ранее работающий APIS, я получаю сообщение об ошибке.

Access to XMLHttpRequest at ‘http://localhost/rest/integration/endpoint’ from origin ‘chrome-extension://xxxxxxxxx’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

Каков правильный шаблон для динамического добавления нового разрешения сервера? и какой CSP требуется для этого?

Пояснения 1) см. Предоставлено в консоли разработчика, поэтому доступ предоставлен. 2) Я успешно вернул повара ie с сервера. (Похоже, я могу получить его только при обратном вызове.)
3) XHR вызывается из фонового скрипта. 4) Вот соответствующий раздел из манифеста. json

"manifest_version": 2,
  "content_security_policy": "default-src 'none'; script-src 'self'; object-src 'none'; connect-src *; style-src 'self' data: 'unsafe-inline'; form-action 'none'; frame-ancestors 'none'; frame-src 'none'; sandbox allow-same-origin allow-scripts;  ",
  "optional_permissions": ["*://*/*"],
  "permissions": [
    "activeTab",

5) Вот вызов xhr в сценарии backgronud

let response = await axios(url, {
    method: "post",
    data: artifact,
    withCredentials: true,
    xsrfCookieName: xsrfCookieName,
    xsrfHeaderName: xsrfHeaderName,
    auth: {
      username: settings.username,
      password: settings.password,
    },
    headers: {
      [xsrfHeaderName]: valueCSRF,
    },
...