【发布时间】:2022-01-19 18:33:28
【问题描述】:
我正在尝试使用使用 Google Cloud Functions 的服务帐号来访问 Workspace Directory API。我正在尝试使用Application Default Credentials 方法。由于文档没有提到要在 Google Cloud Console 端完成的任何其他步骤,我假设该函数的应用程序默认凭据 (ADC) 会自动从 Google Cloud 的元数据服务器传递给云函数。以下代码在我已将 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为指向 JSON 凭据文件的本地模拟环境中完美运行。但是,当我将该功能部署到 Google Cloud 时,我收到错误“未授权访问此资源/api”。我一直在寻找和尝试几天没有任何成功。顺便说一句,before I stumbled upon this thread,我正在使用 GoogleAuth 的 getCredentials() 方法来获取 private_key 来创建 JWT 身份验证(用于“主题”属性)并将该身份验证传递给管理 API 调用。这在我的本地环境中再次完美运行,但在云环境中失败,因为 getCredentials() private_key 为空,这可能是预期的行为。任何帮助都深表感谢。我对在 Stackoverflow 中发帖缺乏经验,如果我需要遵循任何其他协议,请告知。
export const listUsers = functions.https.onCall((data, context) => {
return new Promise(async (resolve, reject) => {
const envAuth = new GoogleAuth({
scopes: ["https://www.googleapis.com/auth/admin.directory.user.readonly"],
clientOptions: {
subject: "admin@mydomain.com",
},
});
const client = await envAuth.getClient();
const service = google.admin({version: "directory_v1", auth: client});
try {
const response = await service.users.list({
customer: "MYCUSTOMER_ID",
});
resolve(response);
} catch (err) {
reject(err);
}
});
});
【问题讨论】: