在开发 Web 应用程序时,身份验证是重要的、必须的步骤。其中,Token 认证是一种相对简单的方式来认证用户身份,并且在 Web 开发中非常流行。Flask Restful 是一个基于 Flask 的 RESTful API 扩展,具有简单易用和高效性等特点。本文将详细介绍在 Flask Restful API 中如何实现 Token 认证。
Token 认证原理
Token 认证是在服务器端生成一个 Token 字符串,并将此字符串响应给客户端。当客户端向服务器发送其它请求时,必须在请求头部中携带该 Token,服务器会对请求进行验证,如果 Token 验证成功,则认为客户端已被验证通过。
在 Flask Restful 中,常常使用 JSON Web Token(JWT)作为 Token,然后使用 Flask-JWT-Extended 扩展来实现 Token 认证。JWT 是一个轻量级的身份验证协议,支持在不同的平台、语言和框架之间传递信息。
JWT 中包含三部分信息:
- Header:通常包含 Token 类型和加密算法
- Payload:通常包含用户信息(ID, username, roles 等)
- Signature:对前两部分(Header 和 Payload)的签名,以及个人私钥加密后的结果,保证 Token 的真实性和完整性
Flask-JWT-Extended 实现 Token 认证
接下来的示例将展示如何使用 Flask-JWT-Extended 来实现 Token 认证。
安装 Flask-JWT-Extended:
pip install flask-jwt-extended
代码示例:
// javascriptcn.com 代码示例 from flask import Flask, jsonify, request from flask_jwt_extended import JWTManager, jwt_required, create_access_token, get_jwt_identity app = Flask(__name__) app.config["SECRET_KEY"] = "super_secret_key" jwt = JWTManager(app) @app.route("/auth", methods=["POST"]) def authenticate(): username = request.json.get("username", None) password = request.json.get("password", None) if not username or not password: return jsonify({"msg": "Missing username or password"}), 400 if username != "admin" or password != "123456": return jsonify({"msg": "Invalid username or password"}), 401 access_token = create_access_token(identity=username) return jsonify(access_token=access_token) @app.route("/protected", methods=["GET"]) @jwt_required() def protected_view(): current_user = get_jwt_identity() return jsonify(logged_in_as=current_user) if __name__ == "__main__": app.run(debug=True)
以上代码实现了两个接口:
/auth
:用于身份验证,接收 username 和 password,验证成功后返回 Token/protected
:需要 Token 验证通过才能访问的接口,返回当前用户信息
总结
本文介绍了在 Flask Restful API 中如何实现 Token 认证,并给出了示例代码。Token 认证相对简单,并且具有流行的优良特点。在应用程序开发过程中使用 Token 认证,可以更好地保障应用程序的安全性和稳定性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6527f8ac7d4982a6eba8a47a