2014-09-25 5 views
1

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

~/сервер/прокси/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/' }); 
    }); 
}; 

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

{ 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, я получаю запрос следующие заголовки:

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, так и искал всю информацию о веб-прокси-сервере, но безрезультатно. Заранее спасибо!

ответ

2

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

+0

Спасибо за ответ GOULETGOULET, кажется, вы правы. Вместо того, чтобы делать CURL, я быстро проверил его, удалив заголовки и затем выполнив вход вручную, когда подскажет веб-сайт. И, конечно же, это 404 после входа в систему. Упрощает ли HTTP-прокси целевой URL-адрес для вашего префикса «/ api»? Поскольку Neo4J поставляется в комплекте с браузером, к которому вы можете напрямую обращаться, который будет http://app-id.sb02.stations.graphenedb.com:24789/browser, но сменится на этот целевой URL также 404. Есть что-то принципиально неправильное в моей настройке? –

+0

Получил это! Это был добавленный/api, о котором вы говорили. Я не знал, что было добавлено в URL. Большое спасибо! –

0

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