我正在尝试使用node.js googleapis库和服务帐户检索用户列表。
我关注this guide以执行Google Apps域范围的权限授权'。有一些Java和Python的例子,但不幸的是没有node.js,这似乎有点不同。
我尝试关注quickstart并完成前两个步骤,但之后它使用手动OAuth流而不是服务帐户。
因此,我尝试按照示例here授权使用服务帐户。这一切似乎都有效,直到我发送请求,然后我收到一个错误:Error: Not Authorized to access this resource/api
代码:403。
这是我的代码:
var google = require('googleapis'),
GoogleAuth = require('google-auth-library'),
authFactory = new GoogleAuth(),
admin = google.admin('directory_v1')
authFactory.getApplicationDefault(function (err, authClient) {
console.log('GOT APPLICATION DEFAULT', authClient)
if (err) {
console.log('Authentication failed because of ', err);
return;
}
if (authClient.createScopedRequired && authClient.createScopedRequired()) {
console.log('SCOPE REQUIRED')
var scopes = ['https://www.googleapis.com/auth/admin.directory.user'];
authClient = authClient.createScoped(scopes);
}
var request = {
auth: authClient,
domain: 'mydomain.com'
};
console.log('request:', request)
admin.users.list(request, function (err, result) {
if (err) {
console.log('admin.users.list error', err);
} else {
console.log(result);
}
});
});
我错过了什么?
答案 0 :(得分:0)
经过几个小时的实验后,我得出的结论是,无法使用服务帐户访问此特定API。虽然我在任何可以找到的文档中都没有明确说明,但快速入门似乎通过使用OAuth进程然后在文件中存储授权未来请求所需的令牌来克服此限制。如果我错了,请添加更好的答案!
我的解决方案是使用quickstart项目生成这些令牌,然后将快速入门中的凭据和令牌添加到我的项目中,并在我的服务器启动时使用它们,例如:
let tokens = require('./credentials/tokens.json'),
credentials = require('./credentials/oauth_credentials.json'),
clientSecret = credentials.installed.client_secret,
clientId = credentials.installed.client_id,
redirectUrl = credentials.installed.redirect_uris[0],
google = require('googleapis'),
GoogleAuth = require('google-auth-library'),
authFactory = new GoogleAuth(),
admin = google.admin('directory_v1'),
oauth2Client = new authFactory.OAuth2(clientId, clientSecret, redirectUrl);
oauth2Client.credentials = tokens;
let request = {
auth: oauth2Client,
domain: 'coachaxis.com'
};
console.log('request:', request)
admin.users.list(request, function (err, result) {
if (err) {
console.log('admin.users.list error', err);
} else {
console.log(result);
}
});
它不优雅,但它有效。