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