FastAPI 如何进行身份验证?

推荐答案

在 FastAPI 中,身份验证可以通过多种方式实现,最常见的方式是使用 OAuth2 和 JWT(JSON Web Tokens)。以下是一个使用 OAuth2 和 JWT 进行身份验证的示例:

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

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

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

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

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

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

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

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

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

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

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

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

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

本题详细解读

1. OAuth2 和 JWT 简介

  • OAuth2 是一种授权框架,允许用户授权第三方应用访问他们的资源,而不需要共享他们的密码。
  • JWT 是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 JSON 对象。JWT 通常用于身份验证和信息交换。

2. FastAPI 中的身份验证流程

  1. 用户登录:用户通过 /token 路由提交用户名和密码。
  2. 验证用户authenticate_user 函数验证用户是否存在以及密码是否正确。
  3. 生成 JWT:如果验证成功,create_access_token 函数生成一个 JWT 令牌,并将其返回给用户。
  4. 访问受保护的路由:用户在访问受保护的路由时,需要在请求头中携带 JWT 令牌。
  5. 验证 JWTget_current_user 函数解码 JWT 令牌并验证其有效性,如果有效则返回当前用户信息。

3. 关键组件

  • OAuth2PasswordBearer:用于定义 OAuth2 密码模式的依赖项,指定了获取令牌的 URL。
  • JWT:用于生成和验证 JWT 令牌,确保数据的安全性和完整性。
  • Depends:用于依赖注入,将身份验证逻辑与路由处理函数解耦。

4. 安全性

  • SECRET_KEY:用于签名 JWT 令牌的密钥,应保持机密。
  • ALGORITHM:指定 JWT 的签名算法,通常使用 HS256。
  • ACCESS_TOKEN_EXPIRE_MINUTES:定义 JWT 令牌的有效期,过期后需要重新登录。

通过这种方式,FastAPI 提供了一种简单而强大的身份验证机制,适用于大多数 Web 应用场景。

纠错
反馈