如何使用API密钥和应用用户名密码在Python中访问Firebase后端
实现方案
你要的能力可以通过调用Firebase官方客户端REST API实现,全程不需要引入Admin SDK、不需要使用服务账号密钥,权限完全受Firebase安全规则管控,具体实现步骤如下:
前置准备
从Firebase控制台项目设置页获取两个必备参数:
- 项目Web API密钥
- 目标资源的访问端点(Firestore默认端点为
https://firestore.googleapis.com/v1/projects/你的项目ID/databases/(default)/documents,实时数据库默认端点为https://你的项目ID.firebaseio.com)
第一步:实现邮箱密码身份认证
调用Firebase Auth的登录接口获取认证ID令牌,示例代码如下:
import requests def get_auth_id_token(web_api_key: str, email: str, password: str) -> str: """通过邮箱密码登录获取Firebase认证ID令牌""" auth_url = f"https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={web_api_key}" req_payload = { "email": email, "password": password, "returnSecureToken": True } resp = requests.post(auth_url, json=req_payload) resp.raise_for_status() return resp.json()["idToken"]
返回的idToken有效期为1小时,后续访问Firebase资源时需要携带该令牌完成鉴权。
第二步:携带令牌访问Firebase后端资源
以Firestore数据查询为例,示例代码如下:
def query_firestore_data(web_api_key: str, id_token: str, project_id: str, collection_name: str, doc_id: str) -> dict: """携带认证令牌访问Firestore资源,请求会自动触发Firebase安全规则校验""" resource_url = f"https://firestore.googleapis.com/v1/projects/{project_id}/databases/(default)/documents/{collection_name}/{doc_id}?key={web_api_key}" req_headers = { "Authorization": f"Bearer {id_token}" } resp = requests.get(resource_url, headers=req_headers) # 权限不匹配时会返回403错误,可自行捕获处理 resp.raise_for_status() return resp.json()
额外优化建议
- 可以封装ID令牌自动刷新逻辑,通过登录时返回的
refreshToken调用刷新接口更新ID令牌,无需用户重复输入密码 - 所有请求的鉴权逻辑和移动端/Web端完全一致,直接复用现有Firebase安全规则即可,不需要额外修改权限配置
- 无需在Python包中内置任何敏感密钥,所有敏感信息由终端用户自行传入,不会有密钥泄露风险
内容的提问来源于stack exchange,提问作者Djai
相关产品推荐
相关产品推荐

