2014-10-31 15 views
8

Chiunque usi la nuova versione 2.0 di Azure AD Graph Client?Grafico client di Azure Active Directory 2.0

Ho iniziato a scherzare con esso ieri ma non riesco a farlo funzionare. La classe GraphConnection è contrassegnata come deprecata e sostituita con ActiveDirectoryClient. Inoltre all'improvviso è tutto Office 365 mentre voglio limitare le mie prove ad Azure Active Directory senza O365. La documentazione è difficile da trovare, almeno quando non si desidera utilizzare gli strumenti API O365 e O365. I campioni AD su GitHub sembrano essere aggiornati, ma il codice utilizza ancora la classe GraphConnection. Vai a capire.

Non molto campioni/guida all'uso di client ActiveDirectory eppure così di seguito utilizzando il codice per ora

public async Task<ActionResult> Index() 
     { 
      List<Exception> exceptions = new List<Exception>(); 
      ProfileViewModel model = new ProfileViewModel(); 
      string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
      AuthenticationContext authContext = new AuthenticationContext(SecurityConfiguration.Authority, new NaiveSessionCache(userObjectID)); 
      ClientCredential credential = new ClientCredential(SecurityConfiguration.ClientId, SecurityConfiguration.AppKey); 

      try 
      { 
       var ServiceUri = new Uri(SecurityConfiguration.GraphUrl); 
       ActiveDirectoryClient client = new ActiveDirectoryClient(ServiceUri, async() => 
       { 
        var result = await authContext.AcquireTokenSilentAsync(SecurityConfiguration.GraphUrl, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId)); 

        return result.AccessToken; 
       }); 
       try 
       { 

        var users = await client.Users.ExecuteAsync(); 

        var user = await client.Users[userObjectID].ExecuteAsync(); 


       } 
       catch (Exception exc) 
       { 
        exceptions.Add(exc); 
       } 


      } 
      catch (AdalSilentTokenAcquisitionException exc) 
      { 
       exceptions.Add(exc); 

      } 
      ViewBag.Exceptions = exceptions; 
      return View(model); 
     } 

client.Users.ExecuteAsync() genera eccezioni

The response payload is a not a valid response payload. Please make sure that the top level element is a valid Atom or JSON element or belongs to 'http://schemas.microsoft.com/ado/2007/08/dataservices' namespace. 

client.Users[userObjectID].ExecuteAsync() getta System.Reflection.TargetInvocationException con Innerexpection

Expected a relative URL path without query or fragment. 
Parameter name: entitySetName 

UPDATE 2/11

Risoluzione spettrale: senza modificare una riga di codice 'client.Utenti.ExecuteAsync()' ha funzionato come previsto. Il mio pensiero è che la gente di Msft abbia cambiato alcune cose sull'API in modo che il carico utile della risposta sia ora corretto. Potrebbero averlo detto.

Per ottenere dati utente utilizzando il codice v2.0 sotto fa il trucco

var = userFetcher client.Users.Where (u => u.ObjectId == userObjectID); var utente = attendi userFetcher.ExecuteAsync();

Se si utilizza rasoio per visualizzare i contenuti degli utenti probabilmente otterrete eccezioni rasoio quando si cerca di passare attraverso collezione così come AssignedPlans

The type 'System.Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. 

risoluzione è modificare le impostazioni di compilazione nel web.config come delineato in http://www.lyalin.com/2014/04/25/the-type-system-object-is-defined-in-an-assembly-that-is-not-reference-mvc-pcl-issue/

<compilation debug="true" targetFramework="4.5" > 
     <assemblies> 
     <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </assemblies> 
    </compilation> 
+0

Abbiamo trovato AAD molto, molto frustrante lavorare con ultimamente. Stiamo attualmente affrontando tutti i tipi di problemi, in particolare per quanto riguarda ZUMO, e trovare soluzioni su un'infarinatura di blog e SO ... nulla menzionato nella documentazione ufficiale. Se non segui esattamente le esercitazioni di MS, sei pronto per una caccia all'oca selvaggia. –

risposta

0

Per recuperare un'entità utente Id, anziché:

var userFetcher = client.Users.Where(u => u.ObjectId == userObjectID); 
var user = await userFetcher.ExecuteAsync(); 

si può semplicemente utilizzare getByObjectId direttamente:

var user = await client.Users.GetByObjectId(userObjectID).ExecuteAsync(); 
Problemi correlati