flask-HTTPAuth 基本认证

Mr chen最近在研究flask-HTTPAuth 摘要,就顺便把基本认证也看了看,两者的区别就不讲了,网上很多讲的,总结起来就是一句摘要认证比基本认证安全就对了,下面先说说基本认证。

flask-HTTPAuth是一个简单的扩展,它简化了使用Flask路径的HTTP认证使用。

基本认证的例子(Basic authenticationexample)

下面的示例应用程序使用HTTP基本身份验证来保护路由“/”:

from flask import Flask
from flask_httpauth import HTTPBasicAuth

app = Flask(__name__)
auth = HTTPBasicAuth()

users = {
    "john": "hello",
    "susan": "bye"
}

@auth.get_password
def get_pw(username):
    if username in users:
        return users.get(username)
    return None

@app.route('/')
@auth.login_required
def index():
    return "Hello, %s!" % auth.username()

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

getpassword回调函数需要返回与作为参数给定的用户名相关联的密码。Flask-HTTPAuth只有

get_password(username)== password成立时才允许访问。

如果在用户数据库中存储散列(hashed)的密码值,那么就需要一个额外的回调函数:

@auth.hash_password
def hash_pw(password):
    return md5(password).hexdigest()

当get_password(username)== hash_password(password)时hash_password回调函数可以被提供访问授权。如果散列算法需要知道用户名,那么回调可以取两个参数,而不是一个:

@auth.hash_password
def hash_pw(username, password):
    salt = get_salt(username)
    return hash(password, salt)

为了保持最大程度的灵活性(flexibility),get_password和hash_password回调可以用verify_password替换:

@auth.verify_password
def verify_pw(username, password):
    return call_custom_verify_function(username, password)

在例子目录中,您可以找到一个名为basic_aut.pyh的示例。显示了如何使用verify_password回调来安全地处理散列密码。









你可能感兴趣的:(flask-HTTPAuth 基本认证)