Flask拡張であるFlask-HTTPAuthを使うと、とても簡単に実現できます。
インストール
$ pip install flask-httpauth
Basic認証
-
from flask_httpauth import HTTPBasicAuth
する -
auth = HTTPBasicAuth()
でauth
インスタンスをつくる - パスワードを確認する関数をつくる:
@auth.get_password
でデコレートする - 認証したい URLを
@auth.login_required
でデコレートする
app.py
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()
Digest認証
ユーザー名とパスワードを MD5でハッシュ化してからサーバーに送る。Basic認証で防げなかった盗聴や改竄への対策。
HTTPBasicAuth
を HTTPDigestAuth
に変えるだけ。
app.py
from flask import Flask
from flask_httpauth import HTTPDigestAuth
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret key here'
auth = HTTPDigestAuth()
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()
ToDo:
pathlib
,itsdangerous
について調べる