編輯清晰度:問題與基本身份驗證
使用python/Flask 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代碼,但似乎沒有區別。
API通過Apache使用mod_wsgi進行託管,所有身份驗證都使用WSGIPassAuthorization On
指令傳遞給wsgi應用程序。
不用說,我有點困惑。如果檢測到401錯誤,我是否應該始終獲得登錄對話框?
對於Firefox,我嘗試設置NTLM設置,但由於我們正在運行Apache Web服務,因此這沒有做任何事情,這是預期的。 –
嘿!我知道基本身份驗證在所有瀏覽器上直接通過API(python/flask)工作,所以它肯定與Ajax有關。儘管最近沒有太多時間研究它。 –
我有一個類似的問題(使用JQuery而不是ExtJS)。我已經在同源和跨源的方面嘗試過相同的請求,並比較了正在發送的請求頭。它們是相同的,除了:同源有「起源」,但跨源有「X請求與」。 (不確定是否應該指責Ajax或瀏覽器。) – Bampfer