2014-10-31 16 views
8

Bất kỳ ai sử dụng phiên bản 2.0 mới của Ứng dụng khách đồ thị Azure AD?Máy khách đồ thị Azure Active Directory 2.0

Tôi bắt đầu lừa xung quanh với nó hôm qua nhưng không thể làm cho nó hoạt động. Lớp GraphConnection được đánh dấu không dùng nữa và được thay thế bằng ActiveDirectoryClient. Ngoài ra tất cả của một đột ngột đó là tất cả Office 365 trong khi tôi chỉ muốn giới hạn thử nghiệm của tôi Azure Active Directory mà không có O365. Tài liệu khó tìm, ít nhất là khi bạn không muốn sử dụng O365 và O365 API Tools. Các mẫu AD trên GitHub dường như được cập nhật nhưng mã vẫn đang sử dụng lớp GraphConnection. Đi con số.

Không có nhiều mẫu/hướng dẫn về việc sử dụng của khách hàng ActiveDirectory chưa nên dưới mã sử dụng cho bây giờ

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() ném ngoại lệ

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() ném System.Reflection.TargetInvocationException với Innerexpection

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

CẬP NHẬT 2/11

Độ phân giải ma quái: không thay đổi một dòng mã 'client.Users.ExecuteAsync()' hoạt động như mong đợi. Suy nghĩ của tôi là những người ở Msft đã thay đổi một số nội dung trên API để tải trọng phản hồi là chính xác. Họ có thể đã đề cập đến điều đó.

Để có được chi tiết người dùng sử dụng mã v2.0 dưới đây hiện các trick

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

Nếu bạn đang sử dụng dao cạo để hiển thị nội dung của người sử dụng có thể bạn sẽ có được ngoại lệ dao cạo khi cố gắng đi qua bộ sưu tập ví dụ như 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'. 

Nghị quyết là để thay đổi cài đặt biên soạn trong web.config của bạn như được nêu trong 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

Chúng tôi đã tìm thấy AAD rất, rất bực bội để làm việc với thời gian gần đây. Chúng tôi hiện đang chạy vào tất cả các loại vấn đề, đặc biệt liên quan đến ZUMO, và tìm kiếm các giải pháp trên một loạt các blog và SO ... không có gì được đề cập trong tài liệu chính thức. Nếu bạn không làm theo hướng dẫn của MS chính xác, bạn đang ở trong một cuộc săn đuổi ngỗng hoang dã. –

Trả lời

0

Đối với lấy một đối tượng người dùng bởi Id, chứ không phải là:

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

bạn chỉ có thể sử dụng trực tiếp getByObjectId:

var user = await client.Users.GetByObjectId(userObjectID).ExecuteAsync(); 
Các vấn đề liên quan