Python调用Google Web Risk提交API时的认证问题求助
解决Google Web Risk提交API的认证问题
我明白你现在卡在Google Web Risk提交API的认证环节了,官方文档确实有时候不够直观,咱们一步步来解决这个问题。
首先,你遇到的错误提示"request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential.",核心原因是你用的API Key认证方式不适用于这个API。Google Web Risk的提交API属于需要身份权限的写入操作,必须使用OAuth 2.0凭证(比如你手里的服务账号JSON文件),而不是简单的API Key。
接下来咱们一步步配置正确的认证流程:
1. 安装必要的依赖库
首先需要安装Google官方的认证库和requests,用来处理凭证生成和API请求:
pip install google-auth requests
2. 使用服务账号JSON完成认证
你下载的服务账号JSON文件是关键,咱们用它来生成有效的OAuth 2.0访问令牌,然后附加到API请求中。下面是完整的代码示例:
import requests from google.oauth2 import service_account from google.auth.transport.requests import Request # 替换成你的服务账号JSON文件的本地路径 SERVICE_ACCOUNT_PATH = "/path/to/your/service-account-file.json" # Web Risk API的授权范围(固定值) WEBRISK_SCOPE = ["https://www.googleapis.com/auth/webrisk"] # 替换成你的Google Cloud项目ID PROJECT_ID = "phishing-project-NUMBER" # 加载服务账号凭证 credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_PATH, scopes=WEBRISK_SCOPE ) # 自动刷新过期的凭证(如果需要) if credentials.expired and credentials.refresh_token: credentials.refresh(Request()) # 构造API请求 api_url = f"https://webrisk.googleapis.com/v1/projects/{PROJECT_ID}/uris:submit" payload = { "submission": { "uri": "http://BADDOMAIN.com" } } headers = { "Authorization": f"Bearer {credentials.token}", "Content-Type": "application/json" } # 发送请求并处理响应 response = requests.post(api_url, json=payload, headers=headers) response_data = response.json() if response.status_code == 200: print("域名提交成功!") print(response_data) else: print(f"请求失败,状态码:{response.status_code}") print(response_data)
3. 关键注意事项
- 权限配置:确保你的服务账号在Google Cloud控制台中被授予了合适的权限,比如
Web Risk Submitter角色(遵循最小权限原则),或者项目级的Editor角色(测试阶段可以临时使用,生产环境建议用更细分的权限)。 - JSON文件路径:一定要替换成你本地服务账号JSON文件的正确路径,避免路径错误导致凭证加载失败。
- 为什么不用API Key:API Key通常用于无需用户身份验证的公开数据读取操作,而Web Risk的提交API涉及向Google提交恶意域名,属于需要身份校验的写入操作,因此必须使用OAuth 2.0凭证。
内容的提问来源于stack exchange,提问作者NKDS
相关产品推荐
相关产品推荐

