Всплывающее окно проверки подлинности браузера не отображается в случае ajax cors с базовым запросом аутентификации - PullRequest
0 голосов
/ 04 января 2019

С веб-страницы домена A я запускаю ajax-запрос к домену B, чтобы получить JSON, для которого базовая аутентификация настроена в домене B. У меня есть доступ к коду в обоих доменах.

Я настроил все необходимые заголовки CORS в домене B (даже после того, как я прочитал некоторый стек-поток, значение заголовка Access-Control-Allow-Origin было определено, а не "*")

Что я Я ожидаю, что всплывающее окно проверки подлинности браузера будет основным, но запрос POST просто не будет работать с 401.

Я вижу, что сервер ответил с ожидаемым заголовком ответа на запрос PRE-FLIGHT OPTION, ниже заголовков запроса и ответа OPTION & фактический вызов метода POST, который происходит

***OPTION REQUEST***
Host: DOMAIN_B:8085
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with
Referer: http://DOMAIN_A:2280/app/
Origin: http://DOMAIN_A:2280
Connection: keep-alive
***OPTION RESPONSE***
HTTP/1.1 200 OK
X-Powered-By: Express
Access-Control-Allow-Origin: http://DOMAIN_A:2280
Vary: Origin
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET,HEAD,PUT,PATCH,POST,DELETE
Access-Control-Allow-Headers: Content-Type,Authorization,x-requested-with
Access-Control-Max-Age: 1
Allow: GET,POST
Content-Type: text/html; charset=utf-8
Content-Length: 8
Date: Fri, 04 Jan 2019 12:48:48 GMT
Connection: keep-alive
*** ACTUAL POST REQUEST***
Host: DOMAIN_B:8085
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://DOMAIN_A:2280/app/
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 105
Origin: http://DOMAIN_A:2280
Connection: keep-alive
*** ACTUAL POST REQUEST***
HTTP/1.1 401 Unauthorized
X-Powered-By: Express
Vary: X-HTTP-Method-Override, Origin
Access-Control-Allow-Origin: http://DOMAIN_A:2280
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST,GET,PUT,DELETE
Access-Control-Allow-Headers: Content-Type,Authorization,x-requested-with
Access-Control-Max-Age: 1
WWW-Authenticate: Basic realm=artist
Content-Type: text/plain; charset=utf-8
Content-Length: 12
Date: Fri, 04 Jan 2019 12:48:48 GMT
Connection: keep-alive

Таким образом, ожидается, что браузер, просматривающий ответ на вызов POST (HTTP-код 401 и заголовок WWW-Authenticate), должен получить запрос на показ всплывающей внутренней аутентификации, но это не так. Я не уверен, что я делаю не так здесь. Показ настраиваемой формы для захвата учетных данных и передача их в заголовок "Authorization" с использованием функции btoa не является опцией

Цени любую помощь, я рву на себе волосы!

1 Ответ

0 голосов
/ 14 января 2019

использование basic-auth npm plugin

const auth = require('basic-auth');
app.use(function (request, response, next) {
  var user = auth(request);
  console.log("user => ",user);
  if (!user || !user.name || !user.pass) {
    response.set('WWW-Authenticate', 'Basic realm="example"');
    return response.status(401).send();
  }
  return next();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...