J'ai une application qui intègre avec Google Apps pour le domaine de travail et oblige à migrer de oauth 1 à oauth 2.Opérations Groupe exécution avec le SDK administration via Java
L'est une application serveur qui nécessite nécessite simplement to:
- liste tous les groupes du domaine.
- liste les utilisateurs d'un groupe spécifié.
- Ajouter des membres à un groupe spécifié.
- Supprimer des membres d'un groupe spécifié.
Compte tenu de ce qui précède, je crois que cela devrait être fait en utilisant un compte de service. J'ai créé ceci, téléchargé le jeton P12 (quelle est la différence entre P12 et un jeton JSON?) Et activé l'API Admin SDK via la console des développeurs. L'accès API est activé dans le panneau de contrôle du domaine et j'ai activé la portée https://www.googleapis.com/auth/admin.directory.group.member pour l'ID client associé au compte de service.
J'ai essayé quelques opérations aléatoires autour de groupes mais j'ai obtenu une réponse "permissions insuffisantes".
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Insufficient Permission",
"reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
Quoi qu'il en soit, d'une part, je suis à la recherche d'un peu d'aide avec le code nécessaire pour mettre en œuvre les opérations ci-dessus correctement et verra s'il reste un problème d'autorisations:
import java.io.File;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;
import org.apache.commons.httpclient.HttpException;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.admin.directory.Directory;
import com.google.api.services.admin.directory.model.Group;
import com.google.api.services.admin.directory.model.Groups;
import com.google.api.services.admin.directory.model.Users;
public class GoogleAppsService {
HttpTransport httpTransport;
JsonFactory jsonFactory;
public GoogleAppsService() throws GeneralSecurityException, IOException {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
jsonFactory = JacksonFactory.getDefaultInstance();
}
public GoogleCredential getCredentials() throws HttpException, IOException, GeneralSecurityException {
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("[email protected]account.com")
.setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/admin.directory.group.member"))
.setServiceAccountPrivateKeyFromP12File(
new File(this.getClass().getResource("/google_apps/google-apps-key.p12").getPath())).build();
return credential;
}
public void listGroups() throws Exception{
GoogleCredential credentials = getCredentials();
Directory directory = new Directory.Builder(
httpTransport, jsonFactory, credentials)
.setApplicationName("xyz")
.build();
//403 insufficient permissions thrown below is the above correct??
Groups result = directory.groups().list().execute();
System.out.println(result);
//iterate and print id/alias of each group
}
public void listUsers(String groupName) throws Exception {
GoogleCredential credentials = getCredentials();
//iterate and print email of each member for specified group
}
public void addUser(String groupname, String emailAddress)throws Exception {
GoogleCredential credentials = getCredentials();
}
public void removeUser(String groupName, String emailAddress)throws Exception {
GoogleCredential credentials = getCredentials();
}
public static void main(String[] args) throws Exception {
try {
GoogleAppsService service = new GoogleAppsService();
service.listGroups();
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Dans le code ci-dessus, vous avez utilisé https://www.googleapis.com/auth/admin.directory.group.member. Mais cette portée ne peut être utilisée que pour les ressources des membres et non pour les groupes. Pour les groupes, vous devez utiliser https://www.googleapis.com/auth/admin.directory.group. Aussi, même si ce n'est pas mentionné dans la documentation, en listant les groupes, en utilisant groups.list, vous devriez aussi donner le nom de domaine. – SGC
Comment peut-on spécifier le nom de domaine? –
De plus, l'utilisation de googleapis.com/auth/admin.directory.group entraîne une exception de 'mauvaise requête'. –