获取当前用户的更多信息

pro*_*011 2 c# microsoft-graph-sdks microsoft-graph-api

我正在.NET CoreC#应用程序一起使用,并且集成了 Azure AD 身份验证。这意味着任何 Azure AD 用户都可以登录此应用程序。现在在某个地方,我想显示当前登录用户的城市、州、国家和其他一些字段值。为此,我使用了Microsoft Graph API,但无法成功获取详细信息。我收到一个错误Request_ResourceNotFound。我使用下面的C#代码来获取当前登录用户的数据。

var clientId = "<CLIENT_ID>"; // I have used my application client id here
var secret = "<CLIENT_SECRET>"; // I have used my client secret here
var domain = "<DOMAIN>"; // I have used domain here
var credentials = new ClientCredential(clientId, secret);
var authContext = new AuthenticationContext($"https://login.microsoftonline.com/{domain}/");
var token = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", credentials);

var graphServiceClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
{
    requestMessage
        .Headers
        .Authorization = new AuthenticationHeaderValue("bearer", token.AccessToken);

    return Task.CompletedTask;
}));

var user = await graphServiceClient
    .Me
    .Request()
    .GetAsync(); // Error at this line
Run Code Online (Sandbox Code Playgroud)

但当我使用时它会抛出以下错误graphServiceClient.Me.Request().GetAsync()

错误:代码:Request_ResourceNotFound

消息:资源“XXXX-XXXX-XXX-XXXX”不存在或其查询的引用属性对象之一不存在。

有没有人之前遇到过这种错误,有人可以建议如何在 C# 中使用 Microsoft Graph 获取当前登录用户的数据吗?

Mar*_*eur 5

您正在使用客户端凭据,因此不存在“当前登录的用户”。它实际上是客户端凭据的全部要点,无需用户即可对应用程序进行身份验证。

使用客户端凭据时,您需要显式指定用户iduserPrincipalName

var user = await graphServiceClient
    .Users["alias@domain.onmicrosoft.com"]
    .Request()
    .GetAsync(); 
Run Code Online (Sandbox Code Playgroud)