Flask基本身份验证不接受用户名和密码

时间:2015-04-15 04:18:12

标签: python flask basic-authentication

我在服务器上的flask应用程序中使用BasicAuth。每当我尝试输入用户名和密码时,应用程序只会再次提示我输入信息,但它不会对我进行身份验证。我不知道如何解决这个问题。我的应用程序中的代码是:

app.config['BASIC_AUTH_USERNAME'] = 'user'
app.config['BASIC_AUTH_PASSWORD'] = 'password'

basic_auth = BasicAuth(app)
@app.route("/secret")
@basic_auth.required
def secret_view():
    return submit.html

2 个答案:

答案 0 :(得分:1)

我在this AWS论坛上找到了答案。问题在于Elastic Beanstalk配置:您必须配置Apache以将身份验证标头(即用户的明文用户名和密码)传递给您的python应用程序(因此,无论您使用何种解决方案来解析身份验证凭据(在我的情况下为flask_httpauth)至mod_wsgi

为此,请在.config文件中保存的.ebextensions文件中设置容器命令。我使用下面的那个。

<强> .ebextensions / auth.config

container_commands:
  01_wsgi_pass_headers:
    command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'

当然,不言而喻,由于这些凭据将以明文形式传递,您必须将应用程序设置为仅通过HTTPS连接进行访问!

答案 1 :(得分:0)

这个简单的例子对我有用:

  

app.py

from flask import Flask, render_template
from flask.ext.basicauth import BasicAuth

app = Flask(__name__)

app.config['BASIC_AUTH_USERNAME'] = 'user'
app.config['BASIC_AUTH_PASSWORD'] = 'password'

basic_auth = BasicAuth(app)
@app.route("/secret")
@basic_auth.required
def secret_view():
    return render_template('secret_page.html')

if __name__ == '__main__':
    app.run(debug=True)
  

模板/ secret_page.html

Secret page!

示例请求:

curl -I http://localhost:5000/secret

HTTP/1.0 401 UNAUTHORIZED
WWW-Authenticate: Basic realm=""
Content-Type: text/html; charset=utf-8
Content-Length: 0
Server: Werkzeug/0.10.4 Python/2.7.8
Date: Wed, 15 Apr 2015 04:42:42 GMT

curl -I -u user:password http://localhost:5000/secret
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 12
Server: Werkzeug/0.10.4 Python/2.7.8
Date: Wed, 15 Apr 2015 04:42:54 GMT

curl -u user:password http://localhost:5000/secret
Secret page!