FastAPI - HTTP 基本身份验证 - 选择自己的 usernam/pass 和 Base64

FastAPI - HTTP Basic Auth - Choose own usernam/pass & Base64

如何添加我的用户名和密码并为 Basic Auth 添加 base64。 (https://fastapi.tiangolo.com/tutorial/security/http-basic-auth/)

我读了很多书,最后我什至设置了 OAuth2 密码(和散列),Bearer 和 JWT 令牌 但这对我来说太过分了,我只需要一个简单的 Basic Auth 并在其上添加一个小的保护,基本上添加一个 base64。

我的想法是在 header:

中有这样的东西

{'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 来 encode/decode 授权,以便能够发送到 header 类似的东西:

{'Authorization': 'Basic aGVsbG86d29ybGQ='} #hello:world

我没有使用过 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对象。这个层次是一个简单的例子,但通常你的 get_current_username() 会做一个数据库查询来检查用户和他们相应的密码是否存在。 你也可以看看这个 git-repo https://gist.github.com/nilsdebruin/8b36cd98c9949a1a87e3a582f70146f1

希望对您有所帮助! :)