Flask-HTTPAuth 使用教程
httpauthHTTP Authentication middlewares项目地址:https://gitcode.com/gh_mirrors/htt/httpauth
项目介绍
Flask-HTTPAuth 是一个 Flask 扩展,用于简化在 Flask 路由中使用 HTTP 认证的过程。它支持多种认证方式,包括基本认证(Basic Authentication)、摘要认证(Digest Authentication)和令牌认证(Token Authentication)。Flask-HTTPAuth 可以帮助开发者快速实现安全的路由保护,确保只有经过认证的用户才能访问特定的资源。
项目快速启动
安装 Flask-HTTPAuth
首先,你需要安装 Flask 和 Flask-HTTPAuth:
pip install Flask Flask-HTTPAuth
基本认证示例
以下是一个使用 HTTP 基本认证保护路由 /
的示例应用程序:
from flask import Flask
from flask_httpauth import HTTPBasicAuth
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
auth = HTTPBasicAuth()
users = {
"john": generate_password_hash("hello"),
"susan": generate_password_hash("bye")
}
@auth.verify_password
def verify_password(username, password):
if username in users and check_password_hash(users.get(username), password):
return username
@app.route('/')
@auth.login_required
def index():
return "Hello, {}!".format(auth.current_user())
if __name__ == '__main__':
app.run()
运行应用程序
保存上述代码到一个文件(例如 app.py
),然后在终端中运行:
python app.py
访问 http://127.0.0.1:5000/
,你会看到一个认证对话框,输入用户名和密码(例如 john
和 hello
)即可访问受保护的资源。
应用案例和最佳实践
多重认证方案
在某些情况下,应用程序可能需要支持多种认证方法。例如,一个 Web 应用程序可以通过基本认证发送客户端 ID 和密钥,而第三方 API 客户端则使用 JWT 令牌。Flask-HTTPAuth 提供了 MultiAuth
类,允许你使用多个认证对象保护一个路由。
以下是一个使用基本认证和令牌认证的示例:
from flask import Flask
from flask_httpauth import HTTPBasicAuth, HTTPTokenAuth, MultiAuth
app = Flask(__name__)
basic_auth = HTTPBasicAuth()
token_auth = HTTPTokenAuth(scheme='Bearer')
multi_auth = MultiAuth(basic_auth, token_auth)
users = {
"john": "hello",
"susan": "bye"
}
tokens = {
"secret-token-1": "john",
"secret-token-2": "susan"
}
@basic_auth.verify_password
def verify_password(username, password):
if username in users and users[username] == password:
return username
@token_auth.verify_token
def verify_token(token):
if token in tokens:
return tokens[token]
@app.route('/')
@multi_auth.login_required
def index():
return "Hello, {}!".format(multi_auth.current_user())
if __name__ == '__main__':
app.run()
用户角色
Flask-HTTPAuth 还包括一个简单的基于角色的认证系统,可以提供更细粒度的访问控制。以下是一个启用角色支持的示例:
from flask import Flask
from flask_httpauth import HTTPBasicAuth
app = Flask(__name__)
auth = HTTPBasicAuth()
users = {
"john": ("hello", "admin"),
"susan": ("bye", "user")
}
@auth.verify_password
def verify_password(username, password):
if username in users and users[username][0] == password:
return username
@auth.get_user_roles
def get_user_roles(user):
return users[user][1]
@app.route('/admin')
@auth.login_required(role='admin')
def admin():
httpauthHTTP Authentication middlewares项目地址:https://gitcode.com/gh_mirrors/htt/httpauth