【问题标题】:Issue with basic auth基本身份验证问题
【发布时间】:2015-07-22 13:25:14
【问题描述】:

为清晰起见编辑:

使用 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。)我已经在同源和跨源上尝试了相同的请求,并比较了正在发送的请求标头。它们是相同的,除了:同源有“Origin”,但跨域有“X-Requested-With”。 (不确定是 Ajax 还是浏览器的问题。)
  • 您可能想使用 Firebug 或 Chrome 开发者工具来检查您的请求标头,看看存在哪些差异。理论 A:请求标头差异之一是导致此问题的原因。理论 B:浏览器只是在处理其 CORS 时以不同方式处理基本身份验证,并跳过用户提示。无论哪种方式:一种可能的解决方法可能是有一个显式登录页面,然后通过自己注入 Authentication 标头来跳过提示。
  • 你好!你有这方面的运气吗?我终于可以回到这个话题了。

标签: extjs basic-authentication preflight flask-cors


【解决方案1】:

我最终只是将我的 ExtJS 和 API 应用程序移动到同一台服务器上(对 ExtJS 应用程序使用 Apache mod_alias,对 Flask 应用程序使用 mod_wsgi 中的 WSGIScriptAlias 指令)。像魅力一样工作,没有 CORS 问题。尽管 Chrome 的解决方案很糟糕,但我认为 Firefox 没有解决方案,我什至不研究 IE。我当然有更好的事情要做。

【讨论】:

  • 最后一点,如果在 Apache 中使用 .htaccess 身份验证,或者通过 Apache 使用安全 LDAP 身份验证(当然也应该通过 purt 443 使用 SSL )。
猜你喜欢
  • 2018-12-20
  • 2021-05-17
  • 2010-11-24
  • 1970-01-01
  • 2013-05-16
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多