2015-05-11 206 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证书。 –