0

Ich benutze azure ad graph api, um Benutzerprofildaten aus dem Active Directory zu holen. Alle meine Eingabeparameter sind korrekt und Token wird auch mit dem folgenden Code generiert. Aber es gibt kein Benutzerprofilobjekt als response.response.IsSuccessStatusCode ist immer falsch. Was könnte mein Fehler hier sein?azure ad graph api zieht keine Benutzerinformationen

private readonly string graphUserUrl = "https://graph.windows.net/{0}/me?api-version=1.6" 
    string tenantName = "Microsoft.OnMicrosoft.com"; 
       string authString = "https://login.microsoftonline.com/" + tenantName; 
       AuthenticationContext authenticationContext = new AuthenticationContext(authString, false); 
       // Config for OAuth client credentials    
       ClientCredential clientCred = new ClientCredential(clientId, appKey); 
       string resource = "https://graph.windows.net"; 
       string token = ""; 
       try 
       { 
        AuthenticationResult authenticationResult = authenticationContext.AcquireToken(resource, clientCred); 
        token = authenticationResult.AccessToken; 
       } 
       catch (AuthenticationException ex) 
       { 

       } 

       UserProfile profile; 
       string requestUrl = String.Format(CultureInfo.InvariantCulture,graphUserUrl,HttpUtility.UrlEncode(tenantId)); 
       HttpClient client = new HttpClient(); 
       HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl); 
       request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); 
       //HttpResponseMessage response = await client.SendAsync(request); 
       HttpResponseMessage response = client.SendAsync(request).Result; 

       // Return the user's profile in the view. 
       if (response.IsSuccessStatusCode) 
       { 
        string responseString = await response.Content.ReadAsStringAsync(); 
        profile = JsonConvert.DeserializeObject<UserProfile> 
(responseString); 
       } 
+0

Haben Sie dieses Problem beheben haben? Bitte lassen Sie mich wissen, wenn Sie das Problem noch haben. –

Antwort

3

Sie verwendeten das Anwendungstoken, um die Benutzerinformationen abzurufen. Der Fehler wird erwartet, da keine solche Anmeldeinformationen für Benutzer im Token vorhanden sind. Um die Benutzerinformationen mit den Programm-Token zu lesen, müssen wir me mit users\{id | userPrincipalName} wie die reuqest unten ersetzen:

https://graph.windows.net/{tenant}/users/{id|userPrincipalName}?api-version=1.6 

Die anwendungs ​​Token wird in der Regel in einem Daemon-Dienst verwendet, der durch Client-Credentials mit erwerben fließen. Weitere Details zu diesem Fluss finden Sie unter here.

Wenn Sie die Schlüsselwelt me verwenden möchten, müssen wir das Delegate-Token verwenden, das wir verwenden können, wie the OAuth 2 code grant flow. Und basierend auf der previews thread scheint es, dass Sie mit einer Web-App entwickelt haben. Überprüfen Sie das Codebeispiel here über das Entwickeln mit Azure AD Graph, um das Profil anzuzeigen. Hier ist die relative Code, um das Token zu erwerben:

string tenantId = ClaimsPrincipal.Current.FindFirst(TenantIdClaimType).Value; 
string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, new NaiveSessionCache(userObjectID)); 
ClientCredential credential = new ClientCredential(clientId, appKey); 
result = await authContext.AcquireTokenSilentAsync(graphResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId)); 

Und hier ist ein hilfreich Dokument über AUTHENCATION secnario für Azure AD:

Authentication Scenarios for Azure AD

+0

Nun, um etwas allgemeiner zu sein, verwenden Sie Client-Anmeldeinformationen, wenn Sie ein Token für die * App * erhalten möchten, und der angemeldete Benutzer spielt keine Rolle. Es kann auch verwendet werden, wenn der Nutzer Ihrer App nicht über ausreichende Berechtigungen in Azure AD verfügt, Ihnen jedoch einen teilweisen Zugriff über Ihre App gewähren möchte. – juunas

Verwandte Themen