使用C#代码查询Azure Active AD用户中的异常

问题描述 投票:0回答:1

我已经在Azure Active Diretcory中注册了一个应用,并使用下面的代码:

<appSettings>
    <add key="TenantId" value="b1f9cb25-7c7a-4ecd-96c1-513c2b42c350"/>
    <add key="TenantName" value="myTentantName.onmicrosoft.com"/>
    <add key="ClientId" value="d82c0c6a-8c14-4c42-8aca-60c79fcfc9b4"/>
    <add key="ClientSecret" value="27?_MOh_qM633Hcccct;cw:@*$9ojcsNxve)rYI"/>
</appSettings>

internal class Settings
{
    public const string ResourceUrl = "https://graph.microsoft.com";
    public static string TenantId => ConfigurationManager.AppSettings["TenantId"];
    public static string TenantName => ConfigurationManager.AppSettings["TenantName"];
    public static string ClientId => ConfigurationManager.AppSettings["ClientId"];
    public static string ClientSecret => ConfigurationManager.AppSettings["ClientSecret"];
    public static string AuthString => "https://login.microsoftonline.com/" + TenantName; 
}

class AuthenticationHelper

public static ActiveDirectoryClient GetActiveDirectoryClientAsApplication()
{
    Uri servicePointUri = new Uri(Settings.ResourceUrl);
    Uri serviceRoot = new Uri(servicePointUri, Settings.TenantId);
    ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(
        serviceRoot,
        async () => await AcquireTokenAsyncForApplication());
    return activeDirectoryClient;
}

private static async Task<string> AcquireTokenAsyncForApplication()
{
    AuthenticationContext authenticationContext = new AuthenticationContext(Settings.AuthString, false);

    ClientCredential clientCred = new ClientCredential(Settings.ClientId, Settings.ClientSecret);
    AuthenticationResult authenticationResult =
        await authenticationContext.AcquireTokenAsync(
            Settings.ResourceUrl,
            clientCred);
    string token = authenticationResult.AccessToken;
    return token;
}

主类

var client = AuthenticationHelper.GetActiveDirectoryClientAsApplication();

try
{
    var users = await client.Users.OrderBy(user => user.DisplayName).ExecuteAsync();
    var foundUser = await client.Users.Where(user => user.ObjectId == "d62d8c6a-dc69-46c1-99c4-36cd672f0c12").ExecuteAsync();
    foreach (var user in users.CurrentPage)
    {
        Console.WriteLine(user.DisplayName + " " + user.ObjectId);
    }
}
catch (Exception exception)
{
    Console.WriteLine(exception);
}

我在主类中遇到错误:

var users = await client.Users.OrderBy(user => user.DisplayName).ExecuteAsync();

System.InvalidOperationException:处理此请求时发生错误。---> System.PlatformNotSupportedException:此平台不支持安全二进制序列化。

enter image description here

c# exception azure-active-directory microsoft-graph
1个回答
0
投票

通过参考官方样本,我获得了成功:Azure-Samples / active-directory-dotnet-graphapi-console

© www.soinside.com 2019 - 2024. All rights reserved.