如何添加我的用户名和密码并为基本身份验证添加base64。 (https://fastapi.tiangolo.com/tutorial/security/http-basic-auth/)
我已经看了很多书,甚至最终还是用密码(和哈希)设置了 OAuth2,并用JWT令牌设置了Bearer ,但这对我来说太多了,我只需要一个简单的基本身份验证并在上面添加一个小的保护,基本上是添加一个base64。
想法是在标头中包含以下内容:
{'Authorization': 'Basic aGVsbG86d29ybGQ='} #hello:world
但是我的知识还很低,我还遇到了第一个问题,甚至配置如何使用我自己的用户名和密码:
from fastapi import Depends, FastAPI
from fastapi.security import HTTPBasic, HTTPBasicCredentials
app = FastAPI()
security = HTTPBasic()
@app.get("/users/me")
def read_current_user(credentials: HTTPBasicCredentials = Depends(security)):
return {"username": credentials.username, "password": credentials.password}
我该如何选择自己的用户名和密码,然后才能使用base64对授权进行编码/解码,以便能够向标头发送以下内容:
{'Authorization': 'Basic aGVsbG86d29ybGQ='} #hello:world
答案 0 :(得分:1)
我还没有使用FastAPI,但是我看了看文档。您在此处提供了以下源代码:
from fastapi import Depends, FastAPI, HTTPException
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from starlette.status import HTTP_401_UNAUTHORIZED
app = FastAPI()
security = HTTPBasic()
def get_current_username(credentials: HTTPBasicCredentials = Depends(security)):
if credentials.username != "foo" or credentials.password != "password":
raise HTTPException(
status_code=HTTP_401_UNAUTHORIZED,
detail="Incorrect email or password",
headers={"WWW-Authenticate": "Basic"},
)
return credentials.username
@app.get("/users/me")
def read_current_user(username: str = Depends(get_current_username)):
return {"username": username}
因此,您要做的是使用Depends
对象。此hier是一个简单的示例,但是通常您的get_current_username()
会进行数据库查询,以检查用户及其对应的密码是否存在。
您还可以查看此git-repo https://gist.github.com/nilsdebruin/8b36cd98c9949a1a87e3a582f70146f1
希望对您有所帮助! :)