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 (username)
return None
@('/')
@auth.login_required
def index():
return "Hello, %s!" % ()
if __name__ == '__main__':
()
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回调来安全地处理散列密码。