「实践经验」如何在 Flask 中使用基于 token 的 RESTful API 鉴权

阅读时长 5 分钟读完

#「实践经验」如何在 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 鉴权功能。其主要用法如下:

  1. 在 Flask App 中注册 JwtManager:
  1. 在登录成功后生成 Token:
-- -------------------- ---- -------
---- ------------------ ------ -------------------

-------------------- -----------------
--- --------
    ---- - ----------------------------------------------- -----------------------------

    -- --- -----
        ------ ------------------- ---- -------- -- ------------ ---

    ------------ - -------------------------------------
    ------ ------------------------ --------------- ---
  1. 在需要进行鉴权的路由上使用 jwt_required 装饰器:
  1. 在 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

纠错
反馈