代码之家  ›  专栏  ›  技术社区  ›  Chase

Flask Security force Security_POST_LOGIN_使用HTTPS的视图

  •  0
  • Chase  · 技术社区  · 7 年前

    我遇到了这样一个问题:Flask Security中的post login重定向没有保持为HTTPS,而是发出了一个HTTP请求。在某些情况下,这会导致错误。
    理想情况下,我的nginx配置会自动将所有请求重定向到:80到:443,但显然这也有问题。当我解决nginx问题时,我真的希望强制Flask安全性始终使用HTTPS。

    我目前的风险值是:
    SECURITY_POST_LOGIN_VIEW = '/logged-in'

    这个 documentation 表示端点名称也可以使用,但它没有说明其格式。您只是提供端点名称,还是用 url_for() ?

    有没有办法强制Flask安全性始终使用HTTPS,无论是在这个特定的实例中还是作为一个整体?

    0 回复  |  直到 7 年前
        1
  •  0
  •   Marco Mendão    7 年前

    我以前也有同样的问题。事实上,正是因为这个限制。我开始用烧瓶jwt代替烧瓶保安。这是这个项目的链接 https://pythonhosted.org/Flask-JWT/

        2
  •  0
  •   Nick K9    7 年前

    我没有关于Flask安全本身的答案,但是你可以使用Google的 Flask-Talisman . 不管你用的是什么库,这都能解决问题。

        3
  •  0
  •   jwag    7 年前

    一个古老而重要的问题。我花了太多时间来解决这个问题,但是这里有:

    答案是Flask的url_for()返回了一个相对的url,比如'/logged in'。

    werkzeug默认情况下(通过其autocorrect_location_header=True Response选项)创建完全限定的URL。

    它从哪里得到方案和服务器? 它通过调用wsgi.get_current_url()来获取-

    其中对于scheme使用:environ[“wsgi.url_scheme–157;]

    假设你在使用uwsgi https://uwsgi-docs.readthedocs.io/en/latest/ -似乎是在看变量 UWSGI_SCHEME和HTTP_X_FORWARDED_PROTO,如果两者都没有设置,则查看变量HTTPS,否则设置wsgi.url_SCHEME=HTTP

    大多数设置uwsgi+python的例子都说将这个(和其他)放在 nginx配置中包含的uwsgi_params文件:

    uwsgi_param  HTTPS              $https if_not_empty;
    

    我相信只要设定:

    uwsgi_param UWSGI_SCHEME https;
    

    在你的nginx配置中,不管怎样,都会迫使flask相信请求是https。

    我使用AWS ALB,它似乎设置了所有相关的X-forward-xxx头 一切正常。

    如果需要同时处理http和https并且LB未设置 头条-然后werkzeug的人有了答案- https://werkzeug.palletsprojects.com/en/0.15.x/middleware/proxy_fix