调用Google Photos API时,Googleapis生成的Access Token返回UNAUTHENTICATED错误
排查Google Photos API 401 UNAUTHENTICATED错误
核心问题出在你获取access token的请求格式上,Google的OAuth2 token端点不接受JSON格式的请求体,必须用application/x-www-form-urlencoded类型的表单数据。
具体问题分析
你当前代码里设置了Content-Type: text/plain,并且用JSON.stringify把参数转成JSON字符串发送,这不符合Google token端点的要求。Postman里默认会把参数转成表单格式发送,所以能拿到有效token;而你代码生成的token因为请求格式错误,实际是无效的,自然调用Photos API会失败。
修正后的获取access token代码
把请求的Content-Type改成application/x-www-form-urlencoded,并将请求体转为表单格式:
fetch("https://www.googleapis.com/oauth2/v4/token", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded", }, body: new URLSearchParams({ grant_type: "refresh_token", client_id: "<client_id>", client_secret: "<client_secret>", refresh_token: "<refresh_token>", }), })
额外排查点
- 确认返回的access token包含正确的权限范围:调用token端点后,检查返回结果里的
scope字段,必须包含Google Photos API需要的权限(比如https://www.googleapis.com/auth/photoslibrary或https://www.googleapis.com/auth/photoslibrary.readonly)。 - 确保refresh token是用当前代码里的
client_id和client_secret对应的应用生成的,OAuth Playground里要选择自己的应用,而不是默认的Google OAuth2 Playground应用。 - 检查代码里是否正确提取了access token:确保你从token请求的返回结果中取到的是
access_token字段,而不是其他字段。
内容的提问来源于stack exchange,提问作者Ws7one
相关产品推荐
相关产品推荐

