【问题标题】:Not authorized when accessing google directory api访问google目录api时未授权
【发布时间】:2021-10-30 01:50:40
【问题描述】:

我正在使用节点列出域中的所有用户。我已经创建了具有域范围委派的服务帐户。 域管理员授予对所需范围的服务帐户的访问权限。

代码:

const { JWT } = require('google-auth-library');
const {google, chat_v1} = require('googleapis');
const keys = require('./keys.json')

async function main() {
const client = new JWT(keys.client_email, keys, keys.private_key, 
    ['https://www.googleapis.com/auth/admin.directory.user', 
    'https://www.googleapis.com/auth/admin.directory.user.readonly',
    'https://www.googleapis.com/auth/cloud-platform'],
    "admin@domain.com"
    );
await client.authorize();

const service = google.admin("directory_v1");

service.users.list({
domain: "domain.com",
maxResults: "10",
orderBy: "email",
}, (err, res) => {
if (err) return console.error('The API returned an error:', err.message);

const users = res.data.users;
if (users.length) {
    console.log('Users:');
    users.forEach((user) => {
    console.log(`${user.primaryEmail} (${user.name.fullName})`);
    });
} else {
    console.log('No users found.');
}
});
}

main();

但我唯一收到的是:

The API returned an error: Login Required.

还为此服务帐户启用了 admin sdk api 知道为什么会这样吗?

【问题讨论】:

    标签: node.js google-api google-admin-sdk


    【解决方案1】:

    我不确定 JWT 是否正确,但我就是这样做的。

    const google = require("googleapis").google;
    const SRVC_ACCOUNT_CREDS = require('./keys.json');
    
    const getClient = async (scopes: string[], user: string)=>{
      const auth = new google.auth.GoogleAuth({
        credentials: SRVC_ACCOUNT_CREDS,
        scopes: scopes
      });
      const client = await auth.getClient();
      client.subject = user;
      return client;
    };
    
    const listUsers = async (query = "", limit = 500, pageToken = null, user, fields, getAll = false)=>{
      const scopes = ["https://www.googleapis.com/auth/admin.directory.user"];
      const client = await getClient(scopes, user);
      const service = google.admin({version: "directory_v1", auth: client});
      const result = {
        users: [],
        nextPageToken: ""
      };
      if(!fields) { 
        fields = "users(name.fullName,primaryEmail,organizations(department,primary,title),thumbnailPhotoUrl),nextPageToken"; 
      }
      do{
        const request = await service.users.list({
          customer: "my_customer",
          fields: fields,
          orderBy: "givenName",
          maxResults: limit,
          pageToken: pageToken,
          query: query,
          viewType: "admin_view"
        });
        pageToken = getAll ? request.data.nextPageToken : null;
        const users = request.data.users;
        if(users && users.length){
          result.users.push(...users);
          result.nextPageToken = request.data.nextPageToken;
        }
      } while(pageToken);
      return result;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-06
      • 2015-11-22
      • 2020-07-31
      • 2012-11-19
      • 2020-06-01
      • 1970-01-01
      • 2018-05-16
      • 2016-12-24
      相关资源
      最近更新 更多