【问题标题】:Google SDK API - update Workspace user profile data by service account (Not Authorized to access this resource/api)Google SDK API - 按服务帐户更新 Workspace 用户个人资料数据(无权访问此资源/api)
【发布时间】:2022-01-25 21:00:41
【问题描述】:

我正在尝试将我们的用户个人资料从我们的内部 SaaS 同步到 Google Workspace 用户个人资料。尤其是(性别、电话、职位、部门)。 看了半天,发现在谷歌云项目中通过OAuth是不行的,但是需要创建一个服务账号。我已经创建了它,但我仍然收到响应无权访问此资源/api

  • 已启用域范围委派。
  • Admin SDK API 已启用。
  • 在 Workspace 安全性中启用了范围为“https://www.googleapis.com/auth/admin.directory.user”的 API 客户端访问。

服务帐号权限:

代码:

        $config = __DIR__ . '/project-users.json';

        $client = new \Google\Client();
        $client->setApplicationName('project-users');
        $client->setAuthConfig($config);
        $client->addScope(Google_Service_Directory::ADMIN_DIRECTORY_USER);
        $client->setSubject('admin@domain.com');
        $client->setAccessType('offline');

        $gsdService = new \Google\Service\Directory($client);
        
        $googleUser = new \Google\Service\Directory\User();
        // Gender
        $gender = new \Google\Service\Directory\UserGender();
        $gender->setType('male');
        // Phone
        $phone = new \Google\Service\Directory\UserPhone();
        $phone->setType('mobile');
        $phone->setValue('123456789');
        $googleUser->setPhones([$phone]);
        // jobTitle and department
        $organization = new \Google\Service\Directory\UserOrganization();
        $organization->setPrimary(TRUE);
        $organization->setTitle('Lead Developer');
        $organization->setDepartment('Dev');
        $googleUser->setOrganizations([$organization]);
        
        $gsdService->users->update('fname.lname@domain.com', $googleUser);

【问题讨论】:

    标签: php google-api google-api-php-client google-admin-sdk


    【解决方案1】:

    使用具有域范围委派的服务帐户时,您需要模拟具有必要授权的用户

    • Directory API 方法users.update 只能由具有相应角色/权限的域管理员执行。
    • how to make a user an admin
    • 如果有疑问,您可以使用授权为“admin@domain.com”的 [Try this API](Try this API) 进行测试,以验证此用户是否具有必要的权限。

    【讨论】:

    • 这是我写的第三点:在Workspace security中启用了范围为“googleapis.com/auth/admin.directory.user”的API客户端访问。
    • 在管理控制台中?如果是这样,我没有正确理解您。
    • “admin@domain.com”是否被授权执行您尝试的更新?您可以通过使用授权为“admin@domain.com”的Try this API 进行测试来快速验证它。
    • 不,Try this API 给了我相同的响应。这大概就是问题所在。帐户“admin@domain.com”仅用于读取用户数据。它不能在 Google Admin 中的任何其他地方使用。如果我理解正确,即使我允许服务帐户级别的范围并且用户没有权限,我也无法访问端点...
    • 您理解正确。具有模拟的服务帐户的想法是代表具有必要权限的用户执行操作 - 在您的情况下,它将是有权访问相应管理目录方法的域管理员。我将更新我的解决方案,因为在您的情况下,问题与我最初假设的不同。
    猜你喜欢
    • 2017-07-01
    • 2013-06-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2018-05-16
    • 2016-12-24
    相关资源
    最近更新 更多