2014-11-20 17 views
6

Utilizzo API Graph per interrogare la mia Azure Active Directory, utilizzando il progetto Microsoft.WindowsAzure.ActiveDirectory.GraphHelper come base per le mie richieste.Ottieni gruppi di membri in Azure AD Graph Helper

In un caso d'uso specifico, ho un gruppo che contiene diverse centinaia di utenti, nonché alcuni gruppi. Sto cercando di caricare i membri del gruppo di questo gruppo padre. Ho provato a chiedere un carico della proprietà members:

DirectoryService.LoadProperty(school, "members"); 

ho solo ottenere 100 risultati, che sono tutti Utenti (ancora una volta, ci sono più di 100 utenti del gruppo).
Ho cercato di effettuare un DataServiceQuery ma non supporta tale operazione:

var groups = DirectoryService.groups; 
Group parentGroup = DirectoryService.groups.Where(it => (it.objectId == parentGroupId)).SingleOrDefault(); 
groups = (DataServiceQuery<Group>)groups.Where(group => group.memberOf.Contains(parentGroup)); 

Non riesce sulla terza linea ci dice che l'espressione non è supportato.

Al momento, l'unica soluzione che posso pensare sta caricando TUTTI dei gruppi, in esecuzione LoadPropert(entity, 'memberOf', null) su tutti e di ciascuno, e poi controllando ognuno se si tratta di un membro del parentGroup (in realtà, uno dei diversi tali parentGroups). note - Inserisco null nello spazio continuationToken poiché questi gruppi devono essere solo membri di un gruppo principale.

Questo è terribilmente inefficiente ma non riesco a trovare nessun altro modo!
C'è un altro modo per fare ciò che sto cercando di fare?

risposta

11

L'API grafico AAD restituisce attualmente 100 elementi per pagina. Se la richiesta effettuata è per più di una pagina di dati, la risposta conterrà un collegamento alla pagina successiva di dati. Da Supported Queries, Filters, and Paging Options in Azure AD Graph API:

Una risposta che contiene i risultati di paging includerà un gettone salto (odata.nextLink) che consente di ottenere la pagina successiva dei risultati.

Il modo più semplice per vedere ciò è accedere come utente della directory a https://graphexplorer.cloudpp.net. Poi, fare il semplice GET:

https://graph.windows.net/<your.domain.name>/users 

Dal momento che si dispone di più di 100 utenti, se si scorre verso il basso dei risultati, si vedrà una proprietà odata.nextLink. Se copi il contenuto di quella proprietà e utilizzi poi la query successiva, otterrai la pagina successiva. Continuando questo esempio, la richiesta successiva sarebbe simile a questa:

https://graph.windows.net/<your.domain.name>/directoryObjects/$/Microsoft.WindowsAzure.ActiveDirectory.User?$skiptoken=X'4453... 

Ho notato che stai utilizzando la libreria helper deprecatedMicrosoft.WindowsAzure.ActiveDirectory.GraphHelper. Invece, dovresti usare la libreria client Graph API più recente (e supportata): Microsoft.Azure.ActiveDirectory.GraphClient (NuGet). Il seguente frammento di codice recupera tutti i membri del gruppo, e stampa solo il nome di visualizzazione degli oggetti Gruppo:

// Fetch group member objects 
IGroupFetcher groupFetcher = (IGroupFetcher)parentGroup; 
IPagedCollection<IDirectoryObject> members = 
    groupFetcher.Members.ExecuteAsync().Result; 

// Iterate over each page keep only the Groups 
do 
{ 
    List<IDirectoryObject> directoryObjects = members.CurrentPage.ToList(); 
    foreach (IDirectoryObject member in directoryObjects) 
    { 
     if (member is Group) 
     { 
      Group group = member as Group; 
      Console.WriteLine("Group: {0}", group.DisplayName); 
     } 
    } 
    members = members.MorePagesAvailable ? 
     members = members.GetNextPageAsync().Result : null; 
} while (members != null); 
+0

Questo cast è un brutto scherzo che mi ha richiesto giorni di lavoro.Il grafico restituisce le collezioni MemberOf e Members che sono vuote fino a quando non si segue lo schema del feticcio nel codice di AzureADSamples. –

2

Si prega di vedere il nostro ultimo campioni su github. L'esempio: https://github.com/AzureADSamples/ConsoleApp-GraphAPI-DotNet ha molte chiamate di esempio all'API del grafico tramite la più recente libreria client grafico, incluso l'ottenimento dell'appartenenza al gruppo (come illustrato da Philippe sopra)

Problemi correlati