使用Google Identity Services访问Photos Library API的问题
解决Google Photos API访问问题:GIS获取的Token正确用法
核心问题
你拿到的idToken(即response.credential)是用于验证用户身份的凭证,不能直接用来访问Google Photos REST API。Photos API需要的是OAuth 2.0标准的access_token,而非id_token。
正确解决方案
1. 配置GIS时指定Photos API权限范围
初始化Google Identity Services(GIS)授权客户端时,必须明确添加Photos API所需的权限范围,按需选择:
https://www.googleapis.com/auth/photoslibrary.readonly(只读访问相册)https://www.googleapis.com/auth/photoslibrary(读写权限)
2. 获取包含access_token的授权响应
不要仅提取credential(idToken),需通过GIS的授权流程获取完整的token响应,其中包含访问API所需的access_token。调整后的代码示例如下:
// 初始化GIS授权客户端 const client = google.accounts.oauth2.initTokenClient({ client_id: '你的客户端ID', scope: 'https://www.googleapis.com/auth/photoslibrary.readonly', callback: async (tokenResponse) => { if (tokenResponse.error !== undefined) { throw tokenResponse.error; } // 使用access_token调用Photos API loadPhotos(tokenResponse.access_token); }, }); // 触发授权流程 function requestAccessToken() { client.requestAccessToken({prompt: ''}); } // 调用Photos API获取照片列表 async function loadPhotos(accessToken) { try { const response = await fetch('https://photoslibrary.googleapis.com/v1/mediaItems', { headers: { 'Authorization': `Bearer ${accessToken}` } }); const data = await response.json(); // 处理返回的照片数据 console.log(data); } catch (error) { console.error('访问Photos API失败:', error); } }
3. 关键注意事项
- 确保你的Google Cloud项目已启用Google Photos Library API,并在OAuth同意屏幕中添加了对应的权限范围。
- 若需长期访问,可通过GIS获取
refresh_token(需满足离线访问配置),用于刷新过期的access_token。 - 无需额外第三方库,原生GIS配合fetch API即可完成需求。
内容的提问来源于stack exchange,提问作者Hany Elkady
相关产品推荐
相关产品推荐

