2015-05-11 2 views
1

отредактированной для ясности:Проблемы с базовой AUTH

Использования Python/КОЛБА REST-API, чтобы обеспечить безопасные конечные точки (с использованием базовой аутентификации) для приложения ExtJS. CORS включен. Все отлично работали во всех моих тестах с Safari. Решил проверить другие браузеры (IE, Chrome и Firefox) с результатом, который я продолжаю получать с ошибкой 401 и без диалогового окна входа.

Я нашел следующее сообщение в блоге http://mortoray.com/2014/04/09/allowing-unlimited-access-with-cors/, что предложил добавить следующий фрагмент кода, чтобы гарантировать, что все заголовки были покрыты для всех конечных точек:

@app.after_request 
def add_cors(resp): 
    """ Ensure all responses have the CORS headers. This ensures any failures are also accessible 
     by the client. """ 
    resp.headers['Access-Control-Allow-Origin'] = request.headers.get('Origin','*') 
    resp.headers['Access-Control-Allow-Credentials'] = 'true' 
    resp.headers['Access-Control-Allow-Methods'] = 'POST, OPTIONS, GET' 
    resp.headers['Access-Control-Allow-Headers'] = request.headers.get(
     'Access-Control-Request-Headers', 'Authorization') 
    # set low for debugging 
    if app.debug: 
     resp.headers['Access-Control-Max-Age'] = '1' 
    return resp 

Я добавил это к моему апи кода в надежде, что она будет работать , но, похоже, это не имеет никакого значения.

API размещен через Apache с использованием mod_wsgi, и вся аутентификация передается в приложение wsgi с использованием директивы WSGIPassAuthorization On.

Излишне говорить, что я немного смущен. Должен ли я всегда получать диалоговое окно входа в систему, если была обнаружена ошибка 401?

+0

Для Firefox я попытался установить настройки NTLM, но это ничего не делало, что ожидается, поскольку мы запускаем веб-службу Apache. –

+0

Эй, там! Я знаю, что базовый auth работает напрямую через API (python/flask) во всех браузерах, поэтому он определенно связан с Ajax. В последнее время у меня не было много времени, чтобы заглянуть в нее. –

+0

У меня есть аналогичная проблема (с использованием JQuery, а не ExtJS.) Я пробовал один и тот же запрос как с одинаковым, так и с перекрестным происхождением и сравнивал отправленные заголовки запроса. Они одинаковы, за исключением того, что у того же происхождения есть «Origin», но перекрестное происхождение имеет «X-Requested-With». (Не уверен, что виноват Ajax или браузер). – Bampfer

ответ

0

Я закончил просто перенос приложений ExtJS и API на один и тот же сервер (используя Apache mod_alias для приложения ExtJS и директиву WSGIScriptAlias ​​от mod_wsgi для приложения Flask). Работает как шарм и не имеет проблем с CORS. Несмотря на ужасное решение для Chrome, я думаю, что нет никакого исправления для Firefox, и я даже не смотрю на IE. У меня, конечно, есть чем заняться.

+0

В заключение отметим, что это будет работать ТОЛЬКО при использовании SSL-сертификатов при использовании аутентификации .htaccess в Apache или при использовании безопасной аутентификации LDAP через Apache (что, конечно же, должно использовать SSL через purt 443). –