使用Blogger API调用返回403错误,已授权仍无资源访问权限
Blogger API 403 Forbidden 问题排查与解决
核心问题分析
你遇到的403错误源于两个关键问题:请求URL的参数错误,以及服务账户未获得目标博客的访问权限。
1. 修复URL中的错误授权参数
你的请求同时使用了两种授权方式,且URL中的access_token=%7Baccess_token%7D是未替换的占位符,直接导致授权逻辑冲突:
- 已经通过请求头
Authorization: Bearer {access_token}传递了有效令牌,无需在URL中重复添加access_token参数 - 若要使用API Key,需替换
%7Bblogger_api_key%7D为实际密钥,或直接省略该参数(Bearer令牌已足够完成授权)
修正后的请求代码:
# 确保导入requests库(你的代码中遗漏了该导入) import requests response = requests.post( 'https://blogger.googleapis.com/v3/blogs/6084243137377471911/posts', headers=headers, json=data, )
2. 给服务账户分配博客访问权限
服务账户是独立的身份实体,默认无法访问你的个人Blogger博客,需完成以下操作:
- 添加服务账户为博客管理员:
- 登录Blogger后台,进入目标博客的「设置」页面
- 找到「权限」选项,添加服务账户JSON文件中
client_email字段对应的邮箱为博客管理员
- Google Workspace域内博客额外配置:
需要在Workspace管理控制台为服务账户开启域范围委派,允许其模拟域内用户访问Blogger API,同时确保权限范围设置正确。
3. 验证权限范围正确性
确认SCOPES变量设置为符合需求的Blogger权限范围:
SCOPES = ['https://www.googleapis.com/auth/blogger']
该范围允许服务账户创建、编辑博客文章,匹配你的发布需求。
4. 简化令牌获取代码
可以省略手动调用refresh的步骤,google-auth库会自动处理令牌刷新逻辑:
from google.oauth2 import service_account import requests SERVICE_ACCOUNT_FILE = '你的服务账户JSON文件路径' SCOPES = ['https://www.googleapis.com/auth/blogger'] creds = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES ) # 若为Workspace域内博客,需模拟特定用户时添加此行 # creds = creds.with_subject('目标用户邮箱') headers = { 'Authorization': f'Bearer {creds.token}', 'Accept': 'application/json', } response = requests.post( 'https://blogger.googleapis.com/v3/blogs/6084243137377471911/posts', headers=headers, json=data, ) print(response.text)
内容的提问来源于stack exchange,提问作者High tichnics
相关产品推荐
相关产品推荐

