我想装配东西,以便我的GCP服务帐户可以邀请用户参加日历活动。因此,例如my-service-account@myproject.iam.gserviceaccount.com
将邀请user@myCorporation.com
参加活动。在我看来,这可以简单地通过向my-service-account@myproject.iam.gserviceaccount.com
授予使用Calendar API的权限而无需向user@myCorporation.com
授予任何其他权限来实现。
我尝试实现此example,但用日历范围和日历API调用替换了计算范围和计算API调用。我的代码返回了错误
Insufficient Permission: Request had insufficient authentication scopes.
我在互联网上闲逛了一堆,我无法确定问题出在我做错了还是谷歌不支持我的工作。
我将不胜感激。
这是我的代码:
const {google} = require('googleapis');
const compute = google.compute('v1');
const {GoogleAuth} = require('google-auth-library');
async function main() {
const auth = new GoogleAuth({
scopes: ['https://www.googleapis.com/auth/calendar',
'https://www.googleapis.com/auth/compute']
});
//keeping the compute stuff in as a sanity check
//to ensure that the problem is with calendar, not something more general
const authClient = await auth.getClient();
const project = await auth.getProjectId();
const res = await compute.zones.list({project, auth: authClient});
console.log(res.data);
createEvent(auth);
}
/**
* Lists the next 10 events on the user's primary calendar.
* @param {google.auth.OAuth2} auth An authorized OAuth2 client.
*/
function createEvent(auth) {
const calendar = google.calendar({version: 'v3', auth});
calendar.events.insert({
calendarId: 'primary',
event: {
"description": "my test event",
"start": {
"date": "2020-05-20",
},
attendees: [{email: "myGuest@mailinator.com"}]
}
}
);
}
main().catch(console.error);
答案 0 :(得分:2)
您需要在三个位置启用API并提供范围:在身份验证代码,GCP控制台和Google Admin控制台中。
正如我在评论中解释的那样,您所提供的代码应该可以正常运行。 Insufficient Permission: Request had insufficient authentication scopes.
错误是由于服务帐户无法访问Google一方所需的范围所致。
确保您已完成以下步骤:
const auth = new GoogleAuth({
scopes: ['https://www.googleapis.com/auth/calendar',
'https://www.googleapis.com/auth/compute']
});
Security > Advanced Settings > Manage API client access
UI元素并将服务帐户所需的 all 作用域分配给服务帐户客户端ID来完成的。注意:这最后一步必须由域管理员完成,而不要由非域管理员完成。
在这种情况下,您需要联系您的域管理员以授予您的项目API访问权限。
我希望这对您有帮助!