You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js服务端无需浏览器弹窗获取Google OAuth accessToken及照片

无浏览器交互:Node.js服务端通过服务账号获取Google Photos内容

要实现纯服务端无浏览器认证,你得用Google服务账号(ServiceAccount)——这是唯一绕开用户交互的方案,OAuth2授权码流程必须用户手动确认,而服务账号可以通过密钥文件直接完成身份验证。

前置要求

  • 如果你用的是Google Workspace(原G Suite)账号:需要域管理员开启域范围委派,让服务账号能模拟域内用户访问Photos资源。
  • 普通个人Google账号:得把你要访问的所有Google Photos相册共享给服务账号的邮箱(服务账号邮箱格式类似xxx@xxx.iam.gserviceaccount.com,创建服务账号时会生成)。

分步实现

1. 创建服务账号并获取密钥文件

  • 登录Google Cloud控制台,新建项目后启用Google Photos Library API。
  • 进入「IAM与管理」→「服务账号」,创建服务账号,给它分配Photos Library Admin或Photos Library Viewer权限(按需选读写/只读)。
  • 为该服务账号创建并下载JSON格式的密钥文件,保存为service-account-key.json。

2. Node.js代码实现认证与API调用

用googleapis库完成认证和内容拉取,全程无浏览器交互:

const { google } = require('googleapis');
const fs = require('fs');

// 加载服务账号密钥文件
const keyFilePath = './service-account-key.json';
const credentials = JSON.parse(fs.readFileSync(keyFilePath, 'utf8'));

// 初始化JWT认证客户端
const authClient = new google.auth.JWT(
  credentials.client_email,
  null,
  credentials.private_key,
  // 权限范围:按需选只读或读写
  ['https://www.googleapis.com/auth/photoslibrary.readonly'],
  // Workspace账号填要模拟的域内用户邮箱;普通账号留空
  'user@your-domain.com' 
);

// 批量获取所有Photos媒体内容
async function getAllPhotos() {
  try {
    // 完成认证
    await authClient.authorize();
    
    // 初始化Photos API客户端
    const photosApi = google.photoslibrary({
      version: 'v1',
      auth: authClient
    });

    let allMediaItems = [];
    let nextPageToken = null;

    // 分页拉取(API单页最多返回100条)
    do {
      const response = await photosApi.mediaItems.list({
        pageToken: nextPageToken,
        pageSize: 100
      });

      if (response.data.mediaItems) {
        allMediaItems = [...allMediaItems, ...response.data.mediaItems];
      }
      nextPageToken = response.data.nextPageToken;
    } while (nextPageToken);

    console.log('拉取到所有媒体内容:', allMediaItems);
    return allMediaItems;
  } catch (error) {
    console.error('拉取Photos内容失败:', error.message);
    throw error;
  }
}

// 执行拉取
getAllPhotos();

重要注意事项

  • 权限限制:普通个人账号下,服务账号只能访问被共享给它的相册,无法直接读取私有未共享的内容——这是Google的权限规则,没法绕过。
  • Workspace配置:域管理员必须在「安全」→「API控制」→「域范围委派」中,为服务账号的客户端ID添加对应的Photos API权限范围,否则模拟用户会失败。
  • API配额:Google Photos API有调用次数限制,可在Cloud控制台查看并调整配额(如果需要)。
  • 依赖安装:记得先安装依赖包:npm install googleapis

内容的提问来源于stack exchange,提问作者Sumant Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:00:55