一、Flask-JWT是什麼?
JSON Web Token(JWT)是一種用於網站認證的令牌(JSON-based access token),用於在網路應用系統中傳遞聲明。Flask-JWT,顧名思義,是一個基於 Flask 開發的 JWT 實現,它通過令牌的形式,完成了用戶認證和授權的過程。
通過 Flask-JWT,我們可以快速、方便地在基於 Flask 的應用中添加 JWT 鑒權認證方式。應用中的每個路由請求都需要在請求頭中帶上 JWT 令牌,才能夠訪問到服務端的資源。這種機制保證了數據的安全性,有效地防止了非法用戶的訪問請求。
二、令牌生成和操作
在 Flask-JWT 中使用 JWT 進行用戶認證和授權,有關JWT的生成、解析、驗證等工作都是在 Flask-JWT 的基礎上完成的。因此,我們需要先了解 Flask-JWT 的生成和操作過程。
1、安裝Flask-JWT
pip install flask-jwt-extended
2、使用Flask-JWT生成JWT Token
在Flask-JWT中,JWT Token是通過調用flask_jwt_extended.create_access_token()介面來生成的。
from flask import Flask
from flask_jwt_extended import create_access_token
app = Flask(__name__)
access_token = create_access_token(identity='user_id')
3、Token解析與驗證
在Flask-JWT中,Token解析及驗證的工作是由flask_jwt_extended.JWTManager進行完成的。
from flask import Flask
from flask_jwt_extended import JWTManager
app = Flask(__name__)
jwt = JWTManager(app)
@jwt_required
def get_user():
return jsonify(current_user)
三、JWT Token 的過期管理
JWT Token具有時效特性,一旦過期,便不能再被訪問。Flask-JWT 還提供了過期管理的功能,我們可以通過下面的配置來實現 Token 過期後自動續期。
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(hours=1)
四、JWT Token 中的許可權管理
在 Flask-JWT 中,我們可以通過 @jwt_required() 裝飾器來自動管理訪問許可權。
from flask_jwt_extended import jwt_required, get_jwt_identity
@app.route('/users/me')
@jwt_required
def get_me():
current_user = get_jwt_identity()
return jsonify(logged_in_as=current_user), 200
五、JWT Token中的資源許可權限制
Flask-JWT還可以通過對Token中添加資源的類別和許可權信息進行資源許可權限制。
from flask_jwt_extended import jwt_required, get_jwt_claims
@app.route('/admin_only')
@jwt_required
def admin_only():
claims = get_jwt_claims()
if claims.get('is_admin') != True:
return jsonify(msg='Admins only!'), 403
return jsonify(msg='Welcome Admin!'), 200
六、結語
通過 Flask-JWT,我們可以快速、方便地在基於 Flask 的應用中添加 JWT 鑒權認證方式,有效地提高應用的安全性。當然,我們在使用 Flask-JWT 的過程中也需要注意安全隱患的存在,並進行相應的安全防護措施。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/308272.html