新闻动态

行业新闻企业新闻雷火电竞

【python】fastapi OAuth2PasswordBearer 怎么使用

雷火电竞

fastapi OAuth2PasswordBearer 怎么使用

介绍

在 FastAPI 中,您可以使用 OAuth2PasswordBearer 类来定义 OAuth2 密码模式的使用认证机制 。要使用 OAuth2PasswordBearer,您需要按照以下步骤进行配置:

  • 在您的使用 FastAPI 应用程序中导入 OAuth2PasswordBearer 类:

    【python】fastapi OAuth2PasswordBearer 怎么使用

    from fastapi import FastAPI, Dependsfrom fastapi.security import OAuth2PasswordBearer
  • 创建一个 OAuth2PasswordBearer 实例,并将其作为依赖项(Dependency)添加到您的 API 函数中:

    oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")@app.get("/users/me")async def read_users_me(token: str = Depends(oauth2_scheme)):return {"token": token}

    在上面的代码中,我们创建了一个名为 oauth2_scheme 的 OAuth2PasswordBearer 实例,并将其作为依赖项添加到了 read_users_me 函数中。这意味着当您调用 read_users_me 函数时,FastAPI 会自动从请求中获取名为 Authorization 的使用请求头,并使用 oauth2_scheme 中定义的认证机制来验证请求头中的令牌(token)是否有效。如果令牌有效,FastAPI 将把令牌作为字符串传递给您的使用 read_users_me 函数。

  • 在请求中添加名为 Authorization 的使用请求头,以便传递令牌。例如,您可以使用以下 curl 命令来发送带有令牌的使用 GET 请求:

    curl -X GET "http://localhost:8000/users/me" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

    在上面的命令中,我们使用了 -H 参数来指定名为 Authorization 的请求头,并使用 Bearer 方案来传递访问令牌 。

  • 以上就是使用使用 OAuth2PasswordBearer 类进行身份验证的基本步骤 。当然,您还可以根据自己的使用实际情况,自定义 OAuth2 认证机制的行为,并添加其他的认证方式。

    具体实现

    下面是使用一个示例,演示了如何使用 OAuth2PasswordBearer 类来实现 OAuth2 密码模式的身份验证:

    from fastapi import FastAPI, Dependsfrom fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestFormfrom pydantic import BaseModelapp = FastAPI()oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")class User(BaseModel):username: strpassword: strusers = [User(username="user1", password="password1"),User(username="user2", password="password2"),]def authenticate_user(username: str, password: str):for user in users:if user.username == username and user.password == password:return user@app.post("/token")async def login(form_data: OAuth2PasswordRequestForm = Depends()):user = authenticate_user(form_data.username, form_data.password)if not user:return {"error": "Invalid credentials"}return {"access_token": user.username, "token_type": "bearer"}@app.get("/users/me")async def read_users_me(token: str = Depends(oauth2_scheme)):return {"token": token}

    在上面的代码中,我们首先定义了一个名为 User 的 Pydantic 模型,表示用户 。然后,我们创建了一个名为 users 的使用用户列表,其中包含两个用户 。接下来,我们定义了一个名为 authenticate_user 的使用函数,用于验证用户的凭据是否正确。在这个示例中,我们只是使用遍历了 users 列表,并检查了每个用户的用户名和密码是否与表单数据匹配。如果匹配成功,我们就返回对应的使用用户对象,否则返回 None。

    然后,我们定义了一个名为 login 的使用函数,用于创建访问令牌(access token) 。这个函数接受一个 OAuth2PasswordRequestForm 对象作为参数,表示表单数据。使用我们首先使用 authenticate_user 函数来验证用户的凭据是否正确。如果验证成功,我们就返回一个包含访问令牌的字典,否则返回一个包含错误消息的字典。

    最后,我们定义了一个名为 read_users_me 的函数,表示当前用户的信息 。这个函数接受一个名为 token 的字符串参数,表示访问令牌。我们使用 OAuth2PasswordBearer 类来定义 token 参数的验证方式。如果验证成功,我们就返回一个包含令牌的字典。

    以上就是一个简单的示例,演示了如何使用 OAuth2PasswordBearer 类来实现 OAuth2 密码模式的身份验证 。

    代码运行

    要运行这段代码,您需要完成以下步骤:

  • 安装 FastAPI 和 uvicorn

    在命令行中运行以下命令来安装 FastAPI 和 uvicorn:

    pip install fastapi uvicorn
  • 复制代码并保存到文件中

    复制上面的示例代码并将其保存到一个名为 main.py 的文件中 。

  • 运行应用程序

    在命令行中运行以下命令来启动应用程序:

    uvicorn main:app --reload

    这将启动一个开发服务器,并监听 http://localhost:8000 端口。您可以在浏览器中打开 http://localhost:8000/docs 来查看自动生成的 API 文档,并测试 API 。

  • 发送请求并测试 API

    在浏览器中打开 http://localhost:8000/docs,找到 POST /token 和 GET /users/me 接口,并使用 Swagger UI 来测试这些接口。首先,您需要使用 POST /token 接口来获取一个访问令牌 。在 Swagger UI 中,单击“Try it out”按钮,然后输入一个有效的用户名和密码 。如果验证成功,您将得到一个包含访问令牌的 JSON 响应。然后,您可以使用 GET /users/me 接口来测试身份验证功能  。在 Swagger UI 中,单击“Authorize”按钮,并在弹出的对话框中输入访问令牌 。然后单击“Authorize”按钮,并单击“Execute”按钮来发送请求 。如果身份验证成功,您将得到一个包含访问令牌的 JSON 响应 。

  • 以上就是运行这段代码的基本步骤 。