调用Google Surveys API遇INVALID_CREDENTIALS错误求助
看起来你遇到的问题很典型:同一OAuth2访问令牌能正常调用Google Calendar API,但访问Google Surveys API时却返回INVALID_CREDENTIALS错误,而且令牌本身通过tokeninfo验证是有效的。下面是几个针对性的排查和解决步骤:
验证令牌的权限范围是否包含Surveys API所需权限
即使令牌能通过tokeninfo验证,也不代表它拥有访问所有Google API的权限。调用https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={valid_token}后,仔细查看返回结果中的scope字段,确认是否包含以下任意一个Surveys相关的权限:https://www.googleapis.com/auth/surveys(读写权限)https://www.googleapis.com/auth/surveys.readonly(只读权限)
如果没有这些条目,说明你在获取令牌的授权流程中没有请求Surveys API的权限。需要重新发起授权请求,在scope参数中添加上述权限之一,再获取新的访问令牌。
确认Google Surveys API已在Cloud Console中启用
很多人会忽略这一点:即使权限配置正确,如果对应的API没有在Google Cloud Console中启用,依然会返回权限类错误。登录你的Cloud Console项目,进入「API和服务」>「已启用的API和服务」,搜索「Google Surveys API」并确认它处于启用状态。如果未启用,点击启用按钮等待生效后再重试。检查请求头的Authorization格式是否完全正确
虽然你调用Calendar API正常,但还是要确认Surveys API请求的Authorization头格式是否严格符合要求:Authorization: Bearer {your_access_token}注意「Bearer」首字母必须大写,且与令牌之间有且仅有一个空格。如果是通过代码动态生成请求,可能存在字符串拼接错误,比如误写为
bearer(小写)或缺少空格,这会导致令牌被视为无效。确认调查ID的有效性和归属
检查请求URL中的{survey_ID}是否是正确的、属于当前授权用户的调查ID。如果ID错误,或者该调查不属于你授权的账号,API也可能返回INVALID_CREDENTIALS这类模糊的权限错误提示。可以先调用Surveys API的列表接口https://www.googleapis.com/surveys/v2/surveys(如果有权限的话),确认你能获取到目标调查的ID。排查令牌的有效期和刷新机制
查看tokeninfo返回的expires_in字段,确认令牌是否仍在有效期内。如果令牌已过期,需要使用刷新令牌获取新的访问令牌——注意刷新令牌对应的授权必须包含Surveys API的权限,否则新令牌依然无法访问Surveys。
内容的提问来源于stack exchange,提问作者VladoS

