Добавление группы с использованием API-интерфейса администратора Google - 403 Нет прав доступа к этому ресурсу / API - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь добавить группу, используя API-интерфейс администратора Google, из приложения Java, которое работает на Google App Engine.Я просмотрел множество других связанных с этим вопросов по SO и попробовал предложения, однако я все еще получаю проблему.

Я создал новую учетную запись службы с помощью консоли Google Cloud и включил G-Suite всей доменной делегации.Я создал ключ JSON для учетной записи службы.

enter image description here

Я включил SDK Admin Directory в консоли администратора Google и для«Идентификатор клиента» этой учетной записи службы, затем я назначил область API в консоли администратора Google в разделе «Безопасность»> «Дополнительные параметры»> «Управление доступом клиента API».Я назначаю область действия https://www.googleapis.com/auth/admin.directory.group:

enter image description here

В консоли администратора Google я также создал системную учетную запись администратора группы в разделеУчетная запись> Роли администратора:

enter image description here

Затем в приложении Java, работающем в Google App Engine, я делаю следующее, чтобы использовать учетную запись службыучетные данные для олицетворения пользователя superadmin, которому я предоставил права администратора группы:

final CREDENTIALS_FILE_PATH = "path_to_my_JSON_credentials_file"
final USER_EMAIL = "email_address_for_superadmin_with_group_admin_rights"

public someMethod() { 
    Directory directory = getDirectoryService(USER_EMAIL); 

    com.google.api.services.admin.directory.model.Group group = new Group(); 
    group.setEmail("myemail@domain.com"); 
    group.setName("test_group"); 
    group.setDescription("test_group_desc"); 

    Group googleGroup = directory.groups().insert(group).execute(); 
} 

/** 
* Build and returns a Directory service object authorized with the service accounts 
* that act on behalf of the given user. 
* 
* @param userEmail The email of the user. Needs permissions to access the Admin APIs. 
* @return Directory service object that is ready to make requests. 
*/ 
public static Directory getDirectoryService(String userEmail) throws GeneralSecurityException, 
IOException, URISyntaxException { 
    HttpTransport httpTransport = new NetHttpTransport(); 
    JacksonFactory jsonFactory = new JacksonFactory(); 

    InputStream resourceAsStream = AdminService.class.getResourceAsStream(CREDENTIALS_FILE_PATH); 
    Collection<String> scopeList = new ArrayList<>(); 
    scopeList.add(DirectoryScopes.ADMIN_DIRECTORY_GROUP); 

    GoogleCredential gcFromJson = GoogleCredential.fromStream(resourceAsStream).createScoped(scopeList); 

    GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(gcFromJson.getTransport()) 
    .setJsonFactory(gcFromJson.getJsonFactory()) 
    .setServiceAccountId(gcFromJson.getServiceAccountId()) 
    .setServiceAccountUser(userEmail) 
    .setServiceAccountPrivateKey(gcFromJson.getServiceAccountPrivateKey()) 
    .setServiceAccountScopes(gcFromJson.getServiceAccountScopes()) 
    .build(); 

    Directory service = new Directory.Builder(httpTransport, jsonFactory, null) 
    .setHttpRequestInitializer(credential).build(); 
    return service; 
}

В этой строке:

Group googleGroup = directory.groups().insert(group).execute(); 

Я получаю следующую ошибку:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Not Authorized to access this resource/api",
    "reason" : "forbidden"
  } ],
  "message" : "Not Authorized to access this resource/api"
}

Что мне нужно сделать для аутентификации?

1 Ответ

0 голосов
/ 19 декабря 2018

Сейчас работает.Одна из проблем, вызвавших 403, заключалась в том, что я пытался создать группу, используя домен, который не соответствует моему домену GSuite в этой строке:

group.setEmail("myemail@domain.com");

Выможет также потребоваться следовать этому руководству Google, чтобы разрешить доступ для сторонних приложений:

Контроль доступа к менее защищенным приложениям

...