簡體   English   中英

使用 MS Graph API 獲取我的用戶信息

[英]Get my user's information using MS Graph API

我正在嘗試使用 C# 的圖表 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端點,它需要接受用戶令牌,因為它具有用戶交互。 所以,我建議你使用auth code flow來獲取access token,這需要你登錄用戶並獲取授權碼,然后使用授權碼來兌換access token。

授權碼提供者

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithRedirectUri(redirectUri)
    .WithClientSecret(clientSecret) // or .WithCertificate(certificate)
    .Build();

AuthorizationCodeProvider authProvider = new AuthorizationCodeProvider(confidentialClientApplication, scopes);

順便說一句,如果你想在沒有用戶登錄的情況下獲取用戶信息,你可以調用/users 端點

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM