【python】fastapi OAuth2PasswordBearer 怎么使用

fastapi OAuth2PasswordBearer 怎么使用

介绍

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

  1. 在您的 FastAPI 应用程序中导入 OAuth2PasswordBearer 类:

    from fastapi import FastAPI, Depends
    from fastapi.security import OAuth2PasswordBearer
    
  2. 创建一个 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_schemeOAuth2PasswordBearer 实例,并将其作为依赖项添加到了 read_users_me 函数中。这意味着当您调用 read_users_me 函数时,FastAPI 会自动从请求中获取名为 Authorization 的请求头,并使用 oauth2_scheme 中定义的认证机制来验证请求头中的令牌(token)是否有效。如果令牌有效,FastAPI 将把令牌作为字符串传递给您的 read_users_me 函数。

  3. 在请求中添加名为 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, Depends
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")


class User(BaseModel):
    username: str
    password: str


users = [
    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 参数的验证方式。如果验证成功,我们就返回一个包含令牌的字典。

扫描二维码关注公众号,回复: 15070436 查看本文章

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

代码运行

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

  1. 安装 FastAPI 和 uvicorn

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

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

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

  3. 运行应用程序

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

    uvicorn main:app --reload
    

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

  4. 发送请求并测试 API

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

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

猜你喜欢

转载自blog.csdn.net/qq_41604569/article/details/130405467