我想操纵事情,以便我的GCP服务帐户可以邀请用户参加日历活动。因此,例如[email protected]
将邀请[email protected]
参加活动。在我看来,这应该可以简单地通过授予[email protected]
使用Calendar API的权限,而无需[email protected]
授予任何其他权限。
我尝试实现此example,但用日历范围和日历API调用替换了计算范围和计算API调用。我的代码返回错误
Insufficient Permission: Request had insufficient authentication scopes.
我在互联网上闲逛了一堆,我无法确定问题是否出在我做错了,还是问题在于Google不支持我想做的事情。
我将不胜感激。
这是我的代码:
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: "[email protected]"}]
}
}
);
}
main().catch(console.error);
您需要在三个位置启用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访问权限。
希望对您有帮助!