我需要使用内置(或其他)服务帐户从我的 Firebase 功能访问 Slides API,而不是登录到 Firebase 的应用程序用户。我已确保服务帐户具有编辑器权限并且已启用幻灯片 API,但我什至还没有达到这一点。
理想情况下,我想代表我组织中的用户进行调用(我已启用域范围的内容),如此答案中所述,但目前我什至无法仅使用默认帐户。
根据其他答案,我尝试了此代码的各种版本:
const {google} = require('googleapis');
const app = initializeApp();
exports.fillTrifecta = onCall(async (request) => {
const gAuth = new google.auth.GoogleAuth({
scopes: ['https://www.googleapis.com/auth/presentations.readonly'],
});
const gAuthClient = await gAuth.getClient();
const slides = google.slides({ version: 'v1', gAuthClient });
const presentation = await slides.presentations.get({
presentationId: userSlideId
});
...
但继续出现
Login Required
错误。我已经在本地模拟器中尝试过并部署到生产环境中。
正如您所展示的,您不能这样做。
您应该遵循您的理想道路并遵循@linda-lawton-daimto 的建议。
包括幻灯片在内的工作区 API 不受 Cloud IAM 管理,因此在服务帐户上设置编辑者角色是无效的。工作区 API 可与您正确设置的 OAuth 范围配合使用。
问题在于 Workspace API 保护用户内容,任意服务帐户访问 Workspace API 用户内容的唯一方法是:
有一种黑客(!?)替代方法,涉及与任意服务帐户的电子邮件地址共享工作区文档(例如幻灯片演示文稿)(〜
{account}@{project}.iam.gserviceaccount.com
)。