当前位置: 首页 > 知识库问答 >
问题:

尝试使用python客户端访问BigQuery时发生身份验证错误

章琛
2023-03-14

我试图通过Python客户端查询BigQuery数据集。

我有一个启用了计费的项目,一个按此处指示分配了BigQuery管理员角色的服务帐户:https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries

这是我正在尝试的代码片段

from google.cloud import bigquery
jsonPath = "/Users/xyz/Downloads/serviceaccount.json"
client = bigquery.Client.from_service_account_json(jsonPath)
query_job = client.query("""
    SELECT
    CONCAT(
    'https://stackoverflow.com/questions/',
    CAST(id as STRING)) as url,
    view_count
    FROM `bigquery-public-data.stackoverflow.posts_questions`
    WHERE tags like '%google-bigquery%'
    ORDER BY view_count DESC
    LIMIT 10""")

results = query_job.result() 

客户。查询调用导致此错误:

Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
  File "/Users/xyz/Library/Python/2.7/lib/python/site- 
packages/google/cloud/bigquery/client.py", line 1254, in query
    query_job._begin(retry=retry)
  File "/Users/xyz/Library/Python/2.7/lib/python/site- 
packages/google/cloud/bigquery/job.py", line 552, in _begin
    method='POST', path=path, data=self._build_resource())
  File "/Users/xyz/Library/Python/2.7/lib/python/site- 
packages/google/cloud/bigquery/client.py", line 336, in _call_api
    return call()
  File "/Users/xyz/Library/Python/2.7/lib/python/site- 
packages/google/api_core/retry.py", line 260, in retry_wrapped_func
    on_error=on_error,
   File "/Users/xyz/Library/Python/2.7/lib/python/site- 
packages/google/api_core/retry.py", line 177, in retry_target
    return target()
  File "/Users/xyz/Library/Python/2.7/lib/python/site- 
packages/google/cloud/_http.py", line 293, in api_request
    raise exceptions.from_http_response(response)
google.api_core.exceptions.Unauthorized: 401 POST . 
https://www.googleapis.com/bigquery/v2/projects/xyzproject/jobs: HTTP 
Basic Authentication is not supported for this API

关于我能做些什么来解决这个身份验证问题,有什么建议吗?太感谢了

python-v2.7。10我安装了最新的谷歌云库

共有1个答案

苏墨竹
2023-03-14

我拿了你的代码,添加语句来打印查询结果,并在Python 2.7.15和Python 3.6.1下运行了这个程序,它工作得很好。

这让我相信你有一个过时的库。Google Python SDK使用google-auth、urllib3等。检查是否安装了最新版本。

另外,我会更新你的Python版本。2.7.10于2015年发布。

在命令提示下:

pip freeze > python_modules.list

然后使用grep或您最喜欢的编辑器检查您安装在系统上的版本。

我的Python 2。x环境正在使用:

  • 谷歌api核心==1.4。1
  • 谷歌认证==1.5。1
  • 谷歌云bigquery==1.6。0
  • 谷歌云核心==0.28。1
  • 谷歌可恢复媒体==0.3。1
  • googleapis公共原型==1.5。3
  • urllib3==1.22

样本输出:

https://stackoverflow.com/questions/13530967 : 44672 views
https://stackoverflow.com/questions/22879669 : 34745 views
https://stackoverflow.com/questions/13221978 : 31584 views
https://stackoverflow.com/questions/6607552 : 27736 views
https://stackoverflow.com/questions/16609219 : 26271 views
https://stackoverflow.com/questions/35159967 : 26258 views
https://stackoverflow.com/questions/10604135 : 25860 views
https://stackoverflow.com/questions/22004216 : 23496 views
https://stackoverflow.com/questions/10644993 : 22356 views
https://stackoverflow.com/questions/11647201 : 18547 views
 类似资料:
  • 编辑:我刚刚在清理项目并使缓存无效后重新启动了Android Studio。现在我发现了这个错误- 下面的错误会无限打印。 我做错了什么?

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一

  • 有时需要对某些网络资源(如Servlet、JSP等)进行访问权限验证,也就是说,有访问权限的用户才能访问该网络资源。进行访问权限验证的方法很多,但通过HTTP响应消息头的WWW-Authenticate字段进行访问权限的验证应该是众多权限验证方法中比较简单的一个。 通过HTTP响应消息头的WWW-Authenticate字段可以使浏览器出现一个验证对话框,访问者需要在这个对话框中输入用户名和密码,