You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在运行时通过Postman为BigQuery REST API传入GCP服务密钥JSON文件

实现方案

问题原因

DefaultCredentialsError报错是因为你把GOOGLE_APPLICATION_CREDENTIALS的配置写在了全局作用域,代码启动时就会尝试加载凭据,此时你还没有通过Postman上传密钥文件,自然找不到有效凭据。

具体实现步骤

  • 第一步:移除全局的凭据路径硬编码,所有凭据相关逻辑都移到接口请求的处理函数内,改为动态构造凭据,不依赖全局环境变量。
  • 第二步:Postman请求配置:选择form-data格式,新增一个key为cred_file的字段,类型设置为「File」,选择本地的key.json密钥文件。

示例代码

import os
import json
from flask import Flask, request
from google.cloud import bigquery
from google.oauth2 import service_account

app = Flask(__name__)

# 已移除全局的os.environ["GOOGLE_APPLICATION_CREDENTIALS"]配置

@app.route('/', methods=['GET', 'POST'])
def get_request():
    # 1. 获取Postman上传的凭据文件
    cred_file = request.files.get('cred_file')
    if not cred_file:
        return "请在form-data中上传cred_file密钥文件", 400
    
    # 2. 从上传的文件内容构造凭据
    credentials = service_account.Credentials.from_service_account_info(
        json.load(cred_file)
    )
    
    # 3. 用自定义凭据初始化BigQuery客户端
    bq_client = bigquery.Client(
        credentials=credentials,
        project=credentials.project_id # 自动从密钥里读项目ID,也可以手动指定
    )
    
    # 4. 执行你的BigQuery查询逻辑
    query = """SELECT * FROM your_project.your_dataset.your_table LIMIT 10"""
    query_job = bq_client.query(query)
    results = [dict(row) for row in query_job.result()]
    
    return {"data": results}

if __name__ == "__main__":
    app.run(debug=True)

注意事项

  • 该方案仅适合测试场景使用,生产环境不建议明文传输服务账号密钥,需额外增加接口鉴权、传输加密等安全措施。
  • 不需要把上传的密钥文件保存到本地磁盘,直接读取流内容构造凭据即可,避免凭据泄露风险。

内容的提问来源于stack exchange,提问作者Anubhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:06:01