2

Ich versuche, die Daten des aktuellen Benutzers mit der Graph-API abzurufen. Ich möchte das Zugriffstoken erhalten und es an die Anforderungsnachricht anhängen. Daher möchte ich die Login-Benutzeroberfläche überspringen. Irgendein Grund, den ich bekomme (401) Unauthorized Fehler, ungültiger Benutzer ... Ich registrierte meine APP (mvc) AAD und die geheime, Klientenidentifikation, Mieteridentität von dort.Benutzer konnte nicht basierend auf Zugriffstoken authentifiziert werden - MS Graph API C#

Dies ist die Methode das Token zu erhalten:

public static string GetToken() 
    { 
     string authority = "https://graph.microsoft.com/{tenantID}/oauth2/token"; 
     string clientId = "client id"; 
     string secret = "client secret"; 
     string resource = "https://graph.microsoft.com"; 

     AuthenticationContext authContext = new AuthenticationContext(authority); 

     ClientCredential clientCredential = new ClientCredential(clientId, secret); 
     AuthenticationResult authResult = authContext.AcquireToken(resource, clientCredential); 
     return authResult.AccessToken; 
    } 

Und dies ist der Code, wo ich das Zugriffstoken anhängen:

public static GraphServiceClient GetAuthenticatedClient() 
    { 
     GraphServiceClient graphClient = new GraphServiceClient(
      new DelegateAuthenticationProvider(
       async (requestMessage) => 
       { 
        string accessToken = GetToken(); 
        requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
       })); 
     return graphClient; 
    } 

Jede Beratung wäre hilfreich, beacuse ich nicht haben Idee.

Antwort

0

Es gibt zwei Arten von Zugriffstoken, die von Azure AD ausgegeben werden.

Die erste ist Delegate-Token, die den Benutzer zu bedienen Benutzer Ressource zu delegieren verwendet.

Und die andere ist Anwendungstoken, die normalerweise verwendet, um die Operation für die Ressource der gesamten Organisation durchzuführen, und es gibt keinen Benutzerkontext (aktueller Benutzer) in diesem Token. Daher sollten wir dieses Token nicht verwenden, um die Ressource als me auszuführen, für die der Benutzerkontext erforderlich ist.

Um die Ressourcen mit dem Anwendungs-Token zu betreiben, müssen wir unter den Benutzer mit der Benutzer Sammlung wie Code angeben:

string userId = ""; 
var user = graphserviceClient.Users[userId].Request().GetAsync().Result; 
+0

Ich habe Methoden, so. var user = graphClient.Users [uid] .Request(). Wählen Sie ("displayName"). GetAsync(); und ich rufe es nach der Methode GetAuthenticatedClient wie folgt auf: GraphServiceClient graphClient = SDKHelper.GetAuthenticatedClient(); ViewBag.Name = graphService.GetMyName (graphClient); – Magg

+0

Um die from-Benutzer-Ressource aus dem aktiven Azure-Verzeichnis zu lesen, müssen wir die Datei 'User.Read.All; Directory.Read.All; 'Erlaubnis für die App. Überprüfen Sie die Berechtigung im Azure-Portal, um sicherzustellen, dass Sie die erforderliche Berechtigung erteilt haben. Sie können diese Berechtigungen überprüfen, indem Sie das Token von [dieser Site] (https://jwt.io/) dekodieren, nachdem Sie die Berechtigung geändert haben. –

+0

Ich habe es schon versucht, diese Berechtigungen sind erteilt. – Magg

Verwandte Themen