python - FastAPI:使用 Firebase 令牌的安全性
问题描述
我正在按照本教程创建一个 api 后端。
我使用 firebase 身份验证:
- 用户在前端输入电子邮件和密码
- 前端将信息发送到firebase
- firebase 身份验证用户和返回令牌
- front 存储令牌
- 对于任何需要身份验证的 url,front 在
Authorization
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
但是由于我使用的是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
但现在我必须检查所有内容并手动返回异常。
有没有 FastAPI 方法来做到这一点?
解决方案
简单地忽略它。
/token
端点用于验证和生成令牌(成功尝试)。这只是一个登录页面/表单。您只需跳过该部分并使用将执行检查的依赖项。
当然,你要遵循同名和定位的OAuth2Password
东东。
请记住,HTTP 是无状态的,令牌用于记住用户已经提供了标识。如果你有一个有效的令牌,你也可以在另一台机器上交换它并使用它(除非有一些安全 cookie 并且与机器相关的信息存储在 cookie 中)。
如果您继续学习链接的教程,您将获得具有身份验证的最终代码。"Authorization: Bearer {token}"
只需在从前端到后端的请求中提供 firebase 令牌,它就会起作用。
在文档链接下方。
https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/
推荐阅读
- heap-memory - 带有python的Nifi ExecuteScript:OOM异常
- c - 结构填充和性能损失
- node.js - Postgres sql脚本在nodejs中管理数据库
- c# - 在单独的类库中使用实体框架核心 dbcontext 的脚手架 asp.net razor 页面出现问题
- angular - 单元测试中的错误(业力)。没有将“exportAs”设置为“ngbPopover”的指令
- javascript - Adobe Campaign Classic - 类型规则问题
- android - AndroidX Crypto库,加密后无法保存文件
- angular - 从 angular7 更新后,angular8 应用程序无法在 IE11 中运行
- r - 使用 dplyr 在每个组中循环以创建逐步曲线
- php - 如何将 PHP 变量封装在字符串中?(在 POST 请求正文中)