Ember-CLI Настройка HTTP-заголовков авторизации на HTTP-прокси

В настоящее время я использую GrapheneDB для моей базы данных Neo4J, информацию о которой я извлекаю из своего приложения Ember. Neo4J требует базовой HTTP-аутентификации, и, поскольку мне нужен более безопасный метод (вместо явного указания заголовков в моих вызовах ajax), я пытаюсь использовать http-прокси для подключения к базе данных. Итак, через Ember-CLI я сгенерировал http-прокси с путем «/api». В прокси-файле у меня есть следующее:

~/сервер/прокси/api.js

var proxyPath = '/api';

module.exports = function(app) {
  // For options, see:
  // https://github.com/nodejitsu/node-http-proxy
  var proxy = require('http-proxy').createProxyServer({});
  var path = require('path');


  app.use(proxyPath, function(req, res, next){
    var credentials = new Buffer('app-id:app-pw').toString('base64');
    // include root path in proxied request
    req.url = path.join(proxyPath, req.url);
    req.headers.authorization = "Basic " + credentials;

    proxy.web(req, res, { target: 'http://app-id.sb02.stations.graphenedb.com:24789/db/data/' });
  });
};

Итак, когда вышеприведенное выполняется, заголовки при печати на сервере кажутся правильными:

{ host: 'localhost:4200',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
  'accept-encoding': 'gzip,deflate,sdch',
  'accept-language': 'en-US,en;q=0.8',
  authorization: 'Basic <correct base64 hash>' }

Но при переходе к URL-адресу моего API я получаю следующие заголовки запроса:

GET /api HTTP/1.1
Host: localhost:4200
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

И я получаю 404 Not Found. Но когда я удаляю заголовок авторизации, я получаю 401 Unauthorized с запросом на ввод имени пользователя/пароля. Иногда в заголовках будет отображаться: "Авторизация: Basic Og==". В любом случае это не работает.

Кто-нибудь знает решение этого? Я попробовал как пример кода setHeader в документации по node-http-proxy, так и искал в Интернете информацию о ember http-proxy, но безрезультатно. Заранее спасибо!


person kaiwah.ng    schedule 25.09.2014    source источник


Ответы (2)


Я просто плюю сюда, потому что не могу проверить это, но я думаю, что у вас это работает. Вы получаете 404, потому что запрашиваете 'http://app-id.sb02.stations.graphenedb.com:24789/db/data/api», которого, вероятно, не существует. Это также может быть из-за заголовка accept. Если вы пробуете это в браузере, заголовок accept будет text/html, но ваша цель может ожидать application/json, и в этом случае это 404s. Вы можете попробовать свернуть его, чтобы проверить это, 'curl -H "ContentType:application/json" [target]'.

person GOULETGOULET    schedule 26.09.2014
comment
Спасибо за ответ GOULETGOULET, кажется, вы правы. Вместо того, чтобы делать CURL, я быстро проверил это, удалив заголовки, а затем войдя в систему вручную, когда появится запрос на веб-сайте. И, конечно же, это 404 после входа в систему. Всегда ли http-прокси добавляет целевой URL-адрес, чтобы иметь с ним ваш префикс /api? Поскольку Neo4J поставляется в комплекте с браузером, к которому вы можете получить прямой доступ, который будет app-id .sb02.stations.graphenedb.com:24789/browser, но переход на этот целевой URL также приводит к ошибке 404. Есть ли что-то принципиально неправильное в моей настройке? - person kaiwah.ng; 26.09.2014
comment
Получил работу! Это был добавленный /api, о котором вы упоминали. Я понятия не имел, что было добавлено в URL-адрес. Большое спасибо! - person kaiwah.ng; 26.09.2014

Как заявил GOULETGOULET, «/api» был добавлен в конец целевого URL-адреса, и в моей цели такого каталога не существует. Так что замена его на «db/data» сработала.

person kaiwah.ng    schedule 26.09.2014