Мы настраиваем простой способ предоставления новых клиентов G Suite, и наш проект уже способен создавать клиентов и соответствующие подписки.
Но пользователи получают только приветственное письмо от Google, и им говорят, чтобы войти.
При попытке создать первого пользователя через каталог администратора API все, что мы получаем, это:
googleapi: Error 403: Access Not Configured. Admin Directory API has not been used in project xxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/admin.googleapis.com/overview?project=xxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry., accessNotConfigured"
(конфиденциальная информация помечена ххх)
Клиент API строится с использованием того же метода, что и клиент посредника, и все это делается с помощью нашей учетной записи делегированного обслуживания на уровне домена с необходимыми областями, установленными в (нашей) G Suite.
При использовании консоли Reseller Console для перехода в интерфейс администратора новых клиентов там включены API (по умолчанию).
Документы в Интернете на самом деле ничего не говорят об этом, а просто описывают, как создать пользователя, но никаких ограничений здесь нет.
Мы используем библиотеки Golang, пользовательская вставка выглядит так:
...
usr, err := adm.Users.Insert(trial.User).Do()
if err != nil {
...
}
...
err = adm.Users.MakeAdmin(usr.PrimaryEmail, &admin.UserMakeAdmin{
Status: true,
}).Do()
if err != nil {
...
}
...
Клиент API построен следующим образом:
const envVar = "GOOGLE_APPLICATION_CREDENTIALS"
if filename := os.Getenv(envVar); filename != "" {
serviceAccountJSON, err := ioutil.ReadFile(filename)
if err != nil {
log.Fatal("creating oauth client failed", zap.Error(err))
}
config, err := google.JWTConfigFromJSON(serviceAccountJSON,
reseller.AppsOrderScope,
admin.AdminDirectoryUserScope,
)
adminClient = config.Client(ctx)
config.Subject = *impersonationUser
resellerClient = config.Client(ctx)
}
res, _ := reseller.New(resellerClient)
adm, _ := admin.New(adminClient)