2016-08-11 21 views
17

Utworzyłem nowy projekt przy użyciu programu Visual Studio 2015 i włączone uwierzytelnianie przy użyciu kont służbowych i szkolnych w usłudze Azure Active Directory. Oto co generowane funkcja Konfiguracja wygląda następująco:Uzyskiwanie grup usługi Azure Active Directory w głównym projekcie asp.net

app.UseStaticFiles(); 
    app.UseCookieAuthentication(); 
    app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
    { 
     ClientId = Configuration["Authentication:AzureAd:ClientId"], 
     ClientSecret = Configuration["Authentication:AzureAd:ClientSecret"], 
     Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
     CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"], 
     ResponseType = OpenIdConnectResponseType.CodeIdToken 
    }); 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 

Oto prymitywny kod działanie próbuje grup użytkowników:

public async Task<IActionResult> Index() 
{ 
    var client = new HttpClient(); 
    var uri = "https://graph.windows.net/myorganization/users/{user_id}/$links/memberOf?api-version=1.6"; 

    var response = await client.GetAsync(uri); 
    if (response.Content != null) 
    { 
     ViewData["response"] = await response.Content.ReadAsStringAsync(); 
    } 

    return View(); 
} 

Co muszę użyć lub zmienić ten kod, aby upewnić się, Mogę uzyskać grupy użytkowników? Obecnie, odpowiedź brzmi:

{ 
    "odata.error":{ 
     "code":"Authentication_MissingOrMalformed", 
     "message":{ 
     "lang":"en", 
     "value":"Access Token missing or malformed." 
     }, 
     "values":null 
    } 
} 
+0

Cześć Kiran, czy coś zrozumiałeś w odniesieniu do tego pytania. Mam dokładnie ten sam problem. Dziękuję Ci! –

+0

Kiran, jeśli podoba mi się moja odpowiedź, wybierz ją. Dziękuję Ci. –

Odpowiedz

0

spędziłem ostatnie 2 dni próbuje dowiedzieć się tego i ostatecznie dostał. Azure AD to ruchomy cel, a ASPNETCORE nadal dojrzewa, a większość dokumentacji na temat dostępu do wykresu Azure AD Graph jest nieaktualna. Od tego momentu uzyskasz dostęp do wykresu AD Azure.

  1. Zanotuj swojej aplikacji identyfikatora klienta
  2. zarejestrować swoją aplikację z Azure Active Directory
  3. wygenerować klucz w tej rejestracji i zapoznanie się z nią (można tylko przeglądać je tuż po jej utworzeniu)
  4. Zapoznaj się z "Nazwą Najemcy" (możesz także użyć Identyfikatora Najemcy).

Następnie wykorzystasz powyższe informacje do wygenerowania tokena Dostępu, a następnie użyj tego tokena do wykonywania połączeń z Grafem.

public async void GetUsers() 
    { 
     // Get OAuth token using client credentials 
     string tenantName = "your-tenant-name.onmicrosoft.com"; 
     string authString = "https://login.microsoftonline.com/" + tenantName; 
     AuthenticationContext authenticationContext = new AuthenticationContext(authString, false); 
     // Config for OAuth client credentials 
     string clientId = "your-client-id"; 
     string key = "your-AzureAD-App-Key"; 
     ClientCredential clientCred = new ClientCredential(clientId, key); 
     string resource = "https://graph.windows.net"; 
     AuthenticationResult authenticationResult; 
     try 
     { 
      authenticationResult = await authenticationContext.AcquireTokenAsync(resource, clientCred); 
     } 
     catch(Exception ex) 
     { 
      throw new Exception(ex.Message, ex.InnerException); 
     } 

     var client = new HttpClient(); 
     var request = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, "https://graph.windows.net/your-tenant-name.onmicrosoft.com/users?api-version=1.6"); 
     request.Headers.Authorization = 
      new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken); 
     var response = await client.SendAsync(request); 
     var content = await response.Content.ReadAsStringAsync(); 
    } 

Jeden inny ogromny haczyka, który może się okazać, że wpadłem i kilku forach dyskutują jest, jeśli pojawia się błąd o błędzie lub Insufficient_Permissions Authorization_Request_Denied. Można to rozwiązać, uruchamiając polecenie PowerShell, aby nadać zarejestrowanej aplikacji uprawnienia "Administrator" Azure AD. Requests to MS Graph API gives me "Authorization Request Denied - Insufficient privileges to complete the operation"

Polecenie PowerShell chcesz uruchomić to

Connect-MsolService 
$ClientIdWebApp = '{your_AD_application_client_id}' 
$webApp = Get-MsolServicePrincipal –AppPrincipalId $ClientIdWebApp 
#use Add-MsolRoleMember to add it to "Company Administrator" role). 
Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberType ServicePrincipal -RoleMemberObjectId $webApp.ObjectId 

Mam nadzieję, że to pomaga. Daj mi znać, jeśli uważasz, że należy wprowadzić jakiekolwiek ulepszenia.

+0

Nie trzeba dodawać głównej usługi do roli administratora firmy. Wymagane jest tylko uprawnienie do odczytu uprawnień dla całej grupy/uprawnienia do odczytu katalogu. Jeśli otrzymasz ten błąd, oznacza to, że nie udzielono zgody administratora lub nie zażądano pozwolenia. – juunas

+0

Ummm .. dzięki za -1 @juunas. Odpowiedź brzmiała bardziej na temat wszystkiego ponad ten dodatkowy smakołyk. I wbrew twojej mądrości powyżej podałem aplikację "Odczytaj wszystkie uprawnienia dla grupy/Odczytaj uprawnienia do danych katalogowych" i nadal nie ma wystarczających uprawnień. Dopiero po tym, jak zastosowałem powyższe zalecone rozwiązanie bonusowe, w końcu odtworzyłem moją prośbę. Mam nadzieję, że moja odpowiedź pomoże komuś, kto napotkał ten sam problem. –

+0

Cóż, zaimplementowałem taką aplikację z tymi uprawnieniami. Ustanowienie szefa o najwyższej dostępnej roli administratora zazwyczaj nie jest dobrym pomysłem. Ponieważ główny zobowiązany może w rezultacie zresetować hasło dowolnego użytkownika w tym momencie. – juunas

Powiązane problemy