BigQuery出现Invalid JWT Signature错误如何解决并创建数据集
RefreshError: invalid_grant 报错修复方案
核心原因
该错误是Google OAuth服务验证服务账号生成的JWT签名失败导致,排除你已经试过的重建服务账号、更新密钥的场景,可按以下步骤逐一排查修复:
排查修复步骤
- 验证密钥文件完整性
首先确认上传到Colab的服务账号JSON密钥没有被截断或修改,运行以下代码校验内容:
如果抛出断言错误,重新从Google Cloud控制台下载完整的服务账号密钥,再上传到Colab即可。import json key_path = '/content/project1-0000000-4b7861b26a6a.json' with open(key_path, 'r') as f: key_data = json.load(f) # 校验核心字段是否存在 assert 'private_key' in key_data, '密钥缺少私钥字段' assert key_data['private_key'].startswith('-----BEGIN PRIVATE KEY-----'), '私钥格式错误' assert key_data['private_key'].endswith('-----END PRIVATE KEY-----\n'), '私钥被截断' - 校验项目ID匹配关系
确认代码中设置的PROJECT = 'project1'和密钥文件中project_id字段的值完全一致,拼写、大小写错误都会导致签名校验失败。 - 升级依赖解决兼容问题
你使用的google-cloud-bigquery==1.21.0版本过旧,和新版google-auth认证类库存在签名逻辑不兼容的问题,运行以下命令升级依赖,之后重启Colab运行时再重新执行代码:!pip install --upgrade google-cloud-bigquery google-auth google-oauth2 google-api-core - 确认服务账号权限
登录Google Cloud控制台,进入project1项目的IAM页面,确认当前使用的服务账号(密钥中client_email字段对应的账号)被授予了至少BigQuery 数据编辑者权限,缺少bigquery.datasets.create权限也会触发相关认证报错。 - 兜底认证方案
以上步骤都无法解决时,可以直接使用Colab内置的用户认证方式,绕过本地服务账号密钥的签名逻辑,替换原有代码为以下内容即可:from google.colab import auth from google.cloud import bigquery # 触发Google账号授权,按提示登录完成认证 auth.authenticate_user() PROJECT = 'project1' bq = bigquery.Client(project=PROJECT) dataset_id2 = "{}.tokyo".format(PROJECT) dsinfo3 = bigquery.Dataset(dataset_id2) dsinfo3.location = "asia-northeast1" ds_tokyo = bq.create_dataset(dsinfo3, exists_ok=True)
内容的提问来源于stack exchange,提问作者moichitano
相关产品推荐
相关产品推荐

