C# 获取我的用户';使用MS-Graph-API获取用户信息

C# 获取我的用户';使用MS-Graph-API获取用户信息,c#,azure-active-directory,microsoft-graph-api,C#,Azure Active Directory,Microsoft Graph Api,我正在尝试使用C#的Graph API SDK获取信息(其思想是应用程序在没有用户交互的情况下运行),如下代码示例所示: IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder .Create("xxx") .WithTenantId("xxx") .WithClientSecret(&qu

我正在尝试使用C#的Graph API SDK获取信息(其思想是应用程序在没有用户交互的情况下运行),如下代码示例所示:

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create("xxx")
    .WithTenantId("xxx")
    .WithClientSecret("xxx")
    .Build();

ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);


GraphServiceClient graphClient = new GraphServiceClient(authProvider);

var user = await graphClient.Me.Request()
    .Select(u => new
    {
        u.DisplayName,
        u.Mail,
        u.UserPrincipalName
    })
    .GetAsync();

它在状态上返回“WaitingForActivation”,我不知道问题出在哪里。

这和你想的不一样。如果调用
/me
端点,则必须登录用户。它实际上获取登录的用户信息,因此您不能使用客户端凭据流获取访问令牌。对于客户端凭据流,它通常用于必须在后台运行且不立即与用户交互(没有用户登录)的服务器到服务器交互。对于
/me
端点,它需要接受用户令牌,因为它具有用户交互。因此,我建议您使用获取访问令牌,这需要您登录到用户并获取授权码,然后使用授权码兑换访问令牌

:


顺便说一下,如果您想在没有用户登录的情况下获取用户信息,可以调用
/users


你能分享更多的代码吗?共享一个调用graphClient.Me.Request()的方法将是有益的。该问题与异步/等待非图形有关API@user2250152,该方法是从API测试中请求的,非常简单。首先,非常感谢您的回答,我将尝试您的建议。--如何获取我的“{userId或userPrincipalName}”它可能获取用户的userId列表用户不是我的联系人或我的联系人的Id列表?@AdrianoMarquesGonalvesdosS这很简单,您有两种方法获取用户的userId或userPrincipalName。1.转到Azure门户>AAD>用户>所有用户。2.请求以获取所有用户信息。用户id是您联系人列表中的id。我正在使用带有默认示例帐户的Graph Explorer,显然一切都很好,但当我使用我的帐户登录时,我无法请求。例如,show me Bad request(400),我需要在我的帐户上启用任何内容吗?
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithClientSecret(clientSecret) // or .WithCertificate(certificate)
    .Build();

AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(confidentialClientApplication, scopes);
IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create("xxx")
    .WithTenantId("xxx")
    .WithClientSecret("xxx")
    .Build();

ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);


GraphServiceClient graphClient = new GraphServiceClient(authProvider);

var user = await graphClient.Users["{userId or userPrincipalName}"].Request()
    .Select(u => new
    {
        u.DisplayName,
        u.Mail,
        u.UserPrincipalName
    })
    .GetAsync();