#「实践经验」如何在 Flask 中使用基于 token 的 RESTful API 鉴权
前言
RESTful API 已经成为了现代互联网应用中不可或缺的一部分。在使用 RESTful API 的过程中,鉴权是其中非常重要的一环。目前常见的鉴权方式有基于 Session 和基于 Token 两种。本文将讨论如何在 Flask 中使用基于 Token 的 RESTful API 鉴权。
Token 鉴权原理
基于 Token 的鉴权方式和基于 Session 的鉴权方式有很大的不同。基于 Session 的方式是在服务端保持一个 Session,每次请求都需要携带该 Session 的 ID,服务端根据 ID 判断用户是否已登录,从而完成鉴权。而基于 Token 的方式则是将用户的权限信息加密在 Token 中发送给客户端,在客户端中保持该 Token,在每次请求时携带该 Token,服务端解码 Token 并验证其中权限信息,从而完成鉴权。
Flask-JWT
在 Flask 中,我们可以使用 Flask-JWT 扩展来实现基于 Token 的 RESTful API 鉴权。Flask-JWT 提供了一个 JwtManager 类,可以方便地实现 Token 鉴权功能。其主要用法如下:
- 在 Flask App 中注册 JwtManager:
from flask import Flask from flask_jwt_extended import JWTManager app = Flask(__name__) app.config['JWT_SECRET_KEY'] = 'super-secret' # 用于 Token 签名的密钥 jwt = JWTManager(app)
- 在登录成功后生成 Token:
-- -------------------- ---- ------- ---- ------------------ ------ ------------------- -------------------- ----------------- --- -------- ---- - ----------------------------------------------- ----------------------------- -- --- ----- ------ ------------------- ---- -------- -- ------------ --- ------------ - ------------------------------------- ------ ------------------------ --------------- ---
- 在需要进行鉴权的路由上使用 jwt_required 装饰器:
from flask import jsonify from flask_jwt_extended import jwt_required, get_jwt_identity @app.route('/protected') @jwt_required def protected(): current_user_id = get_jwt_identity() return jsonify(id=current_user_id, message='Hello, World!'), 200
- 在 JWTManager 中设置各种操作失败时的自定义错误信息:
-- -------------------- ---- ------- ---- ------------------ ------ ----------- ------------- ---------------- --- - --------------- ---------------------------- - -------------- --- - --------------- ------------------------- --- ----------------------------------------- ------ --------- --------- ---- ------------- --- ------ ---- ----- --- -------- --- ---
以上就是使用 Flask-JWT 实现 Token 鉴权的基本用法。
Flask-JWT-Extended
除了 Flask-JWT 外,我们还可以使用 Flask-JWT-Extended 扩展来实现更为复杂的鉴权方式。Flask-JWT-Extended 提供了更多的鉴权方法和配置项,可以满足更为复杂的应用场景。例如可以配置 JWT_BLACKLIST_ENABLED 为 True 来启用 Token 黑名单功能,可以轻松实现对 Token 的 Introspection 和 Revocation。在使用 Flask-JWT-Extended 时,我们需要额外安装 PyJWT 和 python-dateutil 两个库。
总结
本文介绍了在 Flask 中使用基于 Token 的 RESTful API 鉴权的方法和 Flask-JWT 和 Flask-JWT-Extended 扩展。Token 鉴权相较于 Session 鉴权具有更好的扩展性和灵活性,建议在使用 RESTful API 时尽量采用基于 Token 的鉴权方式。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651ba85595b1f8cacd34ad8f