Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 从嵌入式设备访问bigquery API_Rest_Google Cloud Platform_Google Bigquery - Fatal编程技术网

Rest 从嵌入式设备访问bigquery API

Rest 从嵌入式设备访问bigquery API,rest,google-cloud-platform,google-bigquery,Rest,Google Cloud Platform,Google Bigquery,我打算通过RESTAPI将数据从嵌入式设备加载到BigQuery 我的BigQuery初始化已经完成,我正在使用python库访问它 我的嵌入式设备使用我的服务帐户JSON散列的这些参数创建JWT 我的HTTP请求 我尝试使用TCP终端应用程序测试相同的功能 如果配方有什么问题,请向我解释 我首先需要知道BigQuery是否允许这样的访问 请告诉我JSON字符串中的sub应该是什么 如果我做错了,请告诉我正确的程序 我参考了这篇文章,但在我的场景中不能这样做: [已编辑] 查看此链接以配置嵌入式

我打算通过RESTAPI将数据从嵌入式设备加载到BigQuery

  • 我的BigQuery初始化已经完成,我正在使用python库访问它
  • 我的嵌入式设备使用我的服务帐户JSON散列的这些参数创建JWT
  • 我的HTTP请求
  • 我尝试使用TCP终端应用程序测试相同的功能 如果配方有什么问题,请向我解释

  • 我首先需要知道BigQuery是否允许这样的访问
  • 请告诉我JSON字符串中的sub应该是什么
  • 如果我做错了,请告诉我正确的程序
  • 我参考了这篇文章,但在我的场景中不能这样做:

    [已编辑] 查看此链接以配置嵌入式设备的身份验证模型-

  • 创建服务帐户并下载json密钥文件
  • 创建JWT令牌。我使用PyJWT库创建了一个。 根据文档,填写此python文件中的JWT字段,然后运行它:
  • 导入时间,jwt iat=时间。时间() exp=iat+3600 私钥\u ID\u FROM_JSON=“” 来自_JSON=“”的私钥 有效载荷={'iss':'', “sub”:“, “澳元”:https://bigquery.googleapis.com/', “iat”:iat, “exp”:exp} 附加的\u头={'kid':私有\u密钥\u ID\u来自\u JSON} 签名的jwt=jwt.encode(有效负载,来自JSON的私钥,头=附加头,算法='RS256') 印刷品(签名)
  • 测试BigQueryAPI
  • curl-H“授权:承载”https://bigquery.googleapis.
    com/bigquery/v2/projects//dataset/
    
    Sir,我正在使用python库来测试环境,它似乎可以工作。现在我需要对嵌入式设备做同样的事情。STM32微控制器和GSM模块。所以我需要用剩下的API@Noby-我已将响应编辑为仅使用REST API。@Noby-请告诉我它是否适用于您。如果是这样,那就接受这个答案。@Noby-我自己也试过,我可以确认它是有效的。值得一提的几个细节:1)服务帐户JSON文件包含“private\u key”值,如:“----开始私钥------\n……”确保在“private\u key\u FROM\u JSON”中包含完整字符串。2) Python脚本将以:b'eyJ0eXAiOiJ……..的格式返回JWT,但请确保只提供令牌eyJ0eXAiOiJ。。。。。。。。(不带b和“”)在Authorization:Bearer中,否则将无法正确识别,并将失败并出现401错误。试试看,请考虑接受肥皂水的回答。SuDS先生,非常感谢你。当我在API构建器站点上尝试时,它对我起了作用。现在正在试验我的设备的SSL堆栈。
    {
          "iss": "*account*@*project*.iam.gserviceaccount.com",
          "iat": "*thistime*",
          "exp": "*time +20mins*",
          "aud": "https://bigquery.googleapis.com",
          "sub": "*account*@*project*.iam.gserviceaccount.com"
    }
    
    curl -X GET -H 'Authorization: Bearer *my JWT*' -H 'content-type: application/json' -v -i 'https://bigquery.googleapis.com/bigquery/v2/projects/*project*/datasets/*dataset*?key=*API Key*'
    
    import time, jwt
    iat = time.time()
    exp = iat + 3600
    PRIVATE_KEY_ID_FROM_JSON = "<private_key_id from json key file>"
    PRIVATE_KEY_FROM_JSON = "<private_key from json file>"
    payload = {'iss': '<client_email field from json key file>',
               'sub': '<client_email field from json key file>',
               'aud': 'https://bigquery.googleapis.com/',
               'iat': iat,
               'exp': exp}
    additional_headers = {'kid': PRIVATE_KEY_ID_FROM_JSON}
    signed_jwt = jwt.encode(payload, PRIVATE_KEY_FROM_JSON, headers=additional_headers,algorithm='RS256')
    print(signed_jwt)
    
    curl -H "Authorization: Bearer <generated JWT>" https://bigquery.googleapis.
    com/bigquery/v2/projects/<GCP project name>/datasets/<test dataset name>