Pertanyaan Azure Active Directory Graph Client 2.0


Adakah yang menggunakan versi 2.0 baru dari Azure AD Graph Client?

Saya mulai bermain-main dengan itu kemarin tetapi tidak bisa membuatnya bekerja. Itu GraphConnection kelas ditandai usang dan diganti dengan ActiveDirectoryClient. Selain itu tiba-tiba itu semua Office 365 sementara saya hanya ingin membatasi uji coba saya ke Azure Active Directory tanpa O365. Dokumentasi sulit ditemukan, setidaknya ketika Anda tidak ingin menggunakan O365 dan O365 API Tools. Sampel AD di GitHub tampaknya diperbarui juga tetapi kode masih digunakan GraphConnection kelas. Go figure.

Tidak banyak contoh / panduan dalam menggunakan klien ActiveDirectory namun begitu di bawah kode yang digunakan untuk saat ini

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() melempar pengecualian

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() melempar System.Reflection.TargetInvocationException dengan Innerexpection

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

PERBARUI 2/11

Resolusi seram: tanpa mengubah satu baris kode 'client.Users.ExecuteAsync ()' berfungsi seperti yang diharapkan. Pemikiran saya adalah orang-orang di Msft mengubah beberapa hal di API sehingga muatan respons sekarang benar. Mereka bisa menyebutkan itu.

Untuk mendapatkan detail pengguna menggunakan kode v2.0 di bawah ini, lakukan triknya

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

Jika Anda menggunakan silet untuk menampilkan konten pengguna Anda mungkin akan mendapatkan pengecualian pisau cukur ketika mencoba untuk melalui koleksi seperti 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'.

Resolusi adalah untuk mengubah pengaturan kompilasi di web.config Anda sebagaimana diuraikan dalam 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>

10
2017-10-31 09:33


asal


Jawaban:


Untuk mengambil entitas pengguna berdasarkan Id, bukan:

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

Anda bisa langsung menggunakan getByObjectId:

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

0
2018-03-18 03:33