簡體   English   中英

獲取計划返回 401 - 未經授權

[英]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.AllGroup.ReadWrite.All
  • 委派(個人 Microsoft 帳戶):不支持
  • 應用:不支持

為了調用/plans ,您需要使用不同的 OAuth 授權來獲取令牌,該授權支持委托權限,例如AcquireTokenOnBehalfOfAcquireTokenByAuthorizationCode

暫無
暫無

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

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