FastAPI:Firebase 令牌的安全性

CSS*_*Ser 5 python authentication firebase fastapi

我正在按照本教程创建 api 后端。

我使用 firebase 身份验证:

  • 用户在前端输入电子邮件和密码
    • Front 将信息发送到 firebase
    • firebase 验证用户并返回令牌
    • front 存储 token
  • Authorization对于任何需要 auth 的 url,front 在header ( Bearer xxx)中发送令牌
  • 服务器端 firebase 检查令牌

本教程展示了如何使用密码执行此操作:

# creating a dependency
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

async def get_current_user(token: str = Depends(oauth2_scheme)):
    user = fake_decode_token(token)
    return user
Run Code Online (Sandbox Code Playgroud)

但由于我使用的是 firebase,因此无法/token获取带有密码的令牌。

我可以通过创建自定义依赖项来解析令牌,例如:

async def parse_token(auth_token:str = Header(...)):
    token = auth_token.split(' ')[1]
    return token

async def get_current_user(token: str = Depends(parse_token)):
    # check the token with firebase auth
    user = auth.verify_id_token(token)
    return user
Run Code Online (Sandbox Code Playgroud)

但现在我必须检查所有内容并手动返回异常。

有没有 FastAPI 方法可以做到这一点?

lsa*_*abi 1

简单地忽略它。

/token端点用于验证并生成令牌(尝试成功时)。这只是一个登录页面/表单。您只需跳过该部分并使用将执行检查的依赖项即可。

当然,你必须遵循相同的名称和位置的东西OAuth2Password

请记住,HTTP 是无状态的,并且令牌用于记住用户已经提供了标识。如果您有有效的令牌,您也可以将其交换到另一台机器上并使用它(除非有一些安全 cookie 并且机器相关信息存储在 cookie 中)。

如果您继续阅读链接的教程,您将获得带有身份验证的最终代码。"Authorization: Bearer {token}"只需在从前端到后端的请求中提供 firebase 令牌即可。

下面是文档的链接。

https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/