Python/Postman调用Google Vertex AI端点报401认证错误问题
问题根因
返回ACCESS_TOKEN_TYPE_UNSUPPORTED的核心原因是你填入Postman的Bearer Token不是Vertex AI接口认可的有效OAuth2短期访问令牌,常见错误是误用了API Key、服务账号密钥的ID字段、或者过期/权限范围不匹配的令牌。
Postman调试正确配置
- 先确认调用端点使用的服务账号,已被授予
Vertex AI Predictor(角色ID:roles/aiplatform.predictor)权限。 - 不要直接把服务账号JSON文件里的任意字段值当Token填入,需要先生成授权范围为
https://www.googleapis.com/auth/cloud-platform的短期OAuth2访问令牌,这类令牌默认有效期1小时,通常以ya29.为前缀。 - 把生成的有效访问令牌填入Postman的Bearer Token栏,不要额外加引号、重复填写Bearer前缀。
- 检查请求URL内的
[LOCATION]/[PROJECT ID]/[ENDPOINT ID]占位符已全部替换为实际值,无残留方括号。
Python后端调用实现
优先使用官方SDK实现,无需手动处理令牌生成、刷新逻辑,稳定性更高。
方案1:官方SDK调用(推荐)
- 安装依赖
pip install google-cloud-aiplatform
- 调用示例代码
from google.cloud import aiplatform from google.oauth2 import service_account # 替换为实际配置 SA_KEY_PATH = "/path/to/your/service-account-key.json" YOUR_PROJECT_ID = "替换为你的GCP项目ID" YOUR_REGION = "替换为端点部署区域,如us-central1" YOUR_ENDPOINT_ID = "替换为你的端点ID" # 加载凭证 creds = service_account.Credentials.from_service_account_file( SA_KEY_PATH, scopes=["https://www.googleapis.com/auth/cloud-platform"] ) # 初始化端点 aiplatform.init(project=YOUR_PROJECT_ID, location=YOUR_REGION, credentials=creds) endpoint = aiplatform.Endpoint( f"projects/{YOUR_PROJECT_ID}/locations/{YOUR_REGION}/endpoints/{YOUR_ENDPOINT_ID}" ) # 替换为模型要求的输入格式 predict_instances = [{"input_key": "input_value"}] result = endpoint.predict(instances=predict_instances) print(result.predictions)
如果你的Python服务跑在GCP自有环境(Cloud Run、GCE、GKE等),可以直接绑定对应权限的服务账号到运行环境,无需手动加载SA密钥文件,SDK会自动从环境获取凭证。
方案2:原生HTTP请求调用
如果不想引入SDK,可以直接用requests库发请求,配合google-auth库自动管理令牌。
- 安装依赖
pip install requests google-auth
- 调用示例代码
import requests from google.oauth2 import service_account from google.auth.transport.requests import Request # 替换为实际配置 SA_KEY_PATH = "/path/to/your/service-account-key.json" YOUR_PROJECT_ID = "替换为你的GCP项目ID" YOUR_REGION = "替换为端点部署区域,如us-central1" YOUR_ENDPOINT_ID = "替换为你的端点ID" REQUEST_URL = f"https://{YOUR_REGION}-aiplatform.googleapis.com/v1/projects/{YOUR_PROJECT_ID}/locations/{YOUR_REGION}/endpoints/{YOUR_ENDPOINT_ID}:predict" # 自动获取/刷新访问令牌 creds = service_account.Credentials.from_service_account_file( SA_KEY_PATH, scopes=["https://www.googleapis.com/auth/cloud-platform"] ) creds.refresh(Request()) headers = { "Authorization": f"Bearer {creds.token}", "Content-Type": "application/json" } # 替换为模型要求的输入格式 payload = {"instances": [{"input_key": "input_value"}]} resp = requests.post(REQUEST_URL, headers=headers, json=payload) resp.raise_for_status() print(resp.json())
注意事项
- 生产环境不要把服务账号密钥硬编码在代码里,也不要提交到代码仓库,建议通过环境变量、Secret Manager、工作负载身份等方式注入凭证。
- 如果令牌正确但仍返回权限错误,检查服务账号是否被加入端点所在项目的IAM列表,且绑定了正确的预测调用角色。
内容的提问来源于stack exchange,提问作者Prince_SaaS
相关产品推荐
相关产品推荐

