fastapi OAuth2PasswordBearer 怎么使用
介绍
在 FastAPI 中,您可以使用 OAuth2PasswordBearer
类来定义 OAuth2 密码模式的认证机制。要使用 OAuth2PasswordBearer
,您需要按照以下步骤进行配置:
-
在您的 FastAPI 应用程序中导入
OAuth2PasswordBearer
类:from fastapi import FastAPI, Depends from 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, 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
参数的验证方式。如果验证成功,我们就返回一个包含令牌的字典。
以上就是一个简单的示例,演示了如何使用 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 响应。
以上就是运行这段代码的基本步骤。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net