web-dev-qa-db-fra.com

Utilisation d'authProvider avec MS SDK pour les appels de graphique en C #

J'essaie de créer une application console C # pour me connecter à l'API graphique et obtenir une liste d'utilisateurs d'AzureAD à partir d'un locataire. J'ai enregistré l'application et l'administrateur m'a donné ce qui suit

  • Nom et ID du locataire
  • ID client (parfois appelé App ID)
  • Secret client

En utilisant le sdk, le code C # que je dois utiliser ressemble à ceci ( https://docs.Microsoft.com/en-us/graph/api/user-list?view=graph-rest-1.0&tabs=cs ):

GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var users = await graphClient.Users
    .Request()
    .GetAsync();

Cependant, l'application console s'exécutera en tant que processus par lots, il n'y aura donc aucune interaction avec l'utilisateur. Donc, afin de fournir l'authProvider, j'ai suivi cet article sur le site MS docs: https://docs.Microsoft.com/en-us/graph/sdks/choose-authentication-providers?tabs=CS

Et je pense que pour mon objectif, je dois aller pour le "Client Credential OAuth flow". Le code qui est affiché sur cette URL. Mais ici, il l'est aussi.

IConfidentialClientApplication clientApplication = ClientCredentialProvider.CreateClientApplication(clientId, clientCredential);
ClientCredentialProvider authProvider = new ClientCredentialProvider(clientApplication);

Le problème est que Visual Studio ne reconnaît pas la classe ClientCredentialProvider. Je ne sais pas quel assemblage importer. J'utilise les utilisations suivantes en haut.

using Microsoft.Identity.Client;
using Microsoft.IdentityModel.Clients;
using Microsoft.IdentityModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

Je ne suis pas très expérimenté avec les dépôts GitHub et j'utilise Visual Studio 2015. Je serais intéressé par un exemple de code; J'ai regardé mais je n'en trouve pas. MS a des conférences mais utilise un autre type de fournisseur d'authentification qui s'authentifie de manière interactive, ce qui n'est pas ce que je recherche. Je veux obtenir le jeton en utilisant TenantId/ClientId et Client Secret.

4
gtrivedi

Si vous souhaitez parcourir les utilisateurs, remplacez les utilisateurs var par le code suivant:

IGraphServiceUsersCollectionPage users = graphServiceClient.Users.Request().GetAsync().Result;
foreach (User user in users)
{
Console.WriteLine("Found user: " + user.Id);
}
0
Marek Kyzivát