[英]Get Plans returns 401 - Unauthorized
我是 Microsoft Graph 的新手。 我想創建一個控制台應用程序,它將根據組名獲取所有組 ID,然后使用該組 ID 和計划名稱獲取特定的計划 ID(我可能是也可能不是該組的成員)。
我編寫了一個能夠獲取組 ID 的代碼,但是當我嘗試使用它來獲取計划 ID 時:
var targetGroup = await _graphClient
.Groups
.Request()
.Filter($"startsWith(displayName,'{groupName}')")
.GetAsync();
var groupId = targetGroup.First().Id;
var plans = await _graphClient
.Groups[groupId]
.Planner
.Plans
.Request()
.GetAsync();
最后一行引發異常:
401 - 未經授權:由於憑據無效,訪問被拒絕。
我使用的是 O365 E3 試用版。 我已經閱讀了這里發布的所有解決方案並嘗試了它們,但錯誤仍然存在。 我已允許用戶、任務、目錄、文件和組的所有權限(委派和應用程序)。
可能是權限或跟蹤版本的問題嗎?
更新:
我也試過這個:
GraphHttpClient.MicrosoftGraphV1BaseUri + $"groups/{groupId}/planner/plans";
它適用於groupId
但當我添加/planner/plans
它會引發相同的異常。
您使用的是用戶訪問令牌還是應用程序令牌? 因為根據文檔,應用程序令牌不支持該 api (GET /groups/{group-id}/planner/plans)。 我不確定用戶訪問令牌,但我認為您必須是該組的成員才能聯系計划。
您引用的示例代碼正在使用客戶端憑據 OAuth 授權。 這將導致將應用程序范圍分配給您的令牌而不是委托范圍:
AuthenticationResult authResult = null;
authResult = await _clientApplication
.AcquireTokenForClient(_scopes) // This is "Client Credentials"
.ExecuteAsync();
return authResult.AccessToken;
具體來說, AcquireTokenForClient
調用就是發生這種情況的地方。 從文檔:
使用客戶端憑據流從應用程序中配置的權限獲取令牌,用於機密客戶端本身(以無用戶的名義)。 請參閱https://aka.ms/msal-net-client-credentials 。
正如 Martin Jones 在他的回答中所說, /plans
僅支持委派權限范圍:
Group.Read.All
、 Group.ReadWrite.All
為了調用/plans
,您需要使用不同的 OAuth 授權來獲取令牌,該授權支持委托權限,例如AcquireTokenOnBehalfOf
或AcquireTokenByAuthorizationCode
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.