Using authProvider with MS SDK for graph calls in C#

后端 未结 2 1248
独厮守ぢ
独厮守ぢ 2020-12-16 17:47

I\'m trying create a C# console application to connect to graph API and get a list of users from AzureAD from a tenant. I have registered the app and the admin has given me

相关标签:
2条回答
  • 2020-12-16 18:40

    If you wanna cycle trough the users, replace the var users with the following code:

    IGraphServiceUsersCollectionPage users = graphServiceClient.Users.Request().GetAsync().Result;
    foreach (User user in users)
    {
    Console.WriteLine("Found user: " + user.Id);
    }
    
    0 讨论(0)
  • 2020-12-16 18:47

    ClientCredentialProvider is part of the Microsoft.Graph.Auth package. You can read more about this package at https://github.com/microsoftgraph/msgraph-sdk-dotnet-auth

    Note that this package is currently (as of 2019-05-15) in preview, so you may want to wait before using this in a production application.

    Alternatively, the following example uses the Microsoft Authentication Library for .NET (MSAL) directly to set up the Microsoft Graph SDK using app-only authentication:

    // The Azure AD tenant ID or a verified domain (e.g. contoso.onmicrosoft.com) 
    var tenantId = "{tenant-id-or-domain-name}";
    
    // The client ID of the app registered in Azure AD
    var clientId = "{client-id}";
    
    // *Never* include client secrets in source code!
    var clientSecret = await GetClientSecretFromKeyVault(); // Or some other secure place.
    
    // The app registration should be configured to require access to permissions
    // sufficient for the Microsoft Graph API calls the app will be making, and
    // those permissions should be granted by a tenant administrator.
    var scopes = new string[] { "https://graph.microsoft.com/.default" };
    
    // Configure the MSAL client as a confidential client
    var confidentialClient = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithAuthority($"https://login.microsoftonline.com/$tenantId/v2.0")
        .WithClientSecret(clientSecret)
        .Build();
    
    // Build the Microsoft Graph client. As the authentication provider, set an async lambda
    // which uses the MSAL client to obtain an app-only access token to Microsoft Graph,
    // and inserts this access token in the Authorization header of each API request. 
    GraphServiceClient graphServiceClient =
        new GraphServiceClient(new DelegateAuthenticationProvider(async (requestMessage) => {
    
                // Retrieve an access token for Microsoft Graph (gets a fresh token if needed).
                var authResult = await confidentialClient
                    .AcquireTokenForClient(scopes)
                    .ExecuteAsync();
    
                // Add the access token in the Authorization header of the API request.
                requestMessage.Headers.Authorization = 
                    new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
            })
        );
    
    // Make a Microsoft Graph API query
    var users = await graphServiceClient.Users.Request().GetAsync();
    

    (Note that this example uses the latest version of the Microsoft.Identity.Client package. Earlier versions (before version 3) did not include ConfidentialClientApplicationBuilder.)

    0 讨论(0)
提交回复
热议问题