2015-05-11 115 views
1

編輯清晰度:問題與基本身份驗證

使用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錯誤,我是否應該始終獲得登錄對話框?

+0

對於Firefox,我嘗試設置NTLM設置,但由於我們正在運行Apache Web服務,因此這沒有做任何事情,這是預期的。 –

+0

嘿!我知道基本身份驗證在所有瀏覽器上直接通過API(python/flask)工作,所以它肯定與Ajax有關。儘管最近沒有太多時間研究它。 –

+0

我有一個類似的問題(使用JQuery而不是ExtJS)。我已經在同源和跨源的方面嘗試過相同的請求,並比較了正在發送的請求頭。它們是相同的,除了:同源有「起源」,但跨源有「X請求與」。 (不確定是否應該指責Ajax或瀏覽器。) – Bampfer

回答

0

我最終將我的ExtJS和API應用程序移動到同一服務器上(對於ExtJS應用程序使用Apache mod_alias,對於Flask應用程序使用mod_wsgi的WSGIScriptAlias指令)。像魅力一樣工作,沒有CORS問題。儘管Chrome可怕的解決方案,我認爲沒有修復的Firefox,我甚至不看IE瀏覽器。我當然有更好的事情要做。

+0

最後一點需要注意的是,如果在Apache中使用.htaccess身份驗證或者通過Apache使用安全的LDAP身份驗證(當然也應該使用通過purt 443的SSL),那麼這隻會使用SSL證書。 –