![](/img/trans.png)
[英]Could not get user's information using Microsoft Graph with Application Permissions
[英]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.