我正在嘗試使用 MS Graph sdk 訪問已與用戶共享的日歷。我有一個網路應用程式和必要的權限,如 Calendars.Read。使用郵遞員我設法閱讀用戶的日歷事件
https://login.microsoftonline.com/{app_id}/oauth2/v2.0/authorize
授權,然后
https://graph.microsoft.com/v1.0/users/{user}/calendar/events
用于閱讀日歷事件。在郵遞員中一切正常,但我在使用 MSGraph 框架做同樣的事情時遇到了問題。我嘗試使用此示例MS 示例來復制 C# 中的郵遞員呼叫,但我收到一條錯誤訊息
“代碼:BadRequest /me 請求僅對委托身份驗證流程有效”
當我使用await graphClient.Me.Calendars.Request().GetAsync()
和
訪問被拒絕。檢查憑據并重試
當我使用await graphClient.Users["[email protected]"].Calendars.Request().GetAsync()
從我讀到的第一個帶有委托身份驗證流程的錯誤出現,因為我正在使用應用程式權限模型,我應該在這種情況下使用委托權限。問題是我不知道如何將 ms 圖形庫用于委派權限模型。我發現的唯一示例涉及直接呼叫 API,但我需要使用 MS Graph 庫。
uj5u.com熱心網友回復:
如您所知,有 2 種 api 權限,委托/應用程式 api 權限。對于delegate權限,需要用戶先使用自己的賬號登錄獲取access token,并允許用戶查詢自己的Calendar資訊,在這種場景下/me/calendar相當于/users/signed_in_user_id/calendar.
對于應用程式 api 權限,它允許 daemon 應用程式查詢每個人的日歷資訊。它僅支持/users/user_id/calendar因為沒有用戶登錄您的應用程式,并且您的應用程式不是“我”。
您在問題中分享的 Ms 示例使用了客戶端憑據流并需要授予應用程式權限。如果你想有一個功能可以查詢所有用戶的資訊,你應該繼續使用它。代碼示例應如下所示:
using Microsoft.Graph;
using Azure.Identity;
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "tenant_name.onmicrosoft.com";
var clientId = "aad_app_id";
var clientSecret = "client_secret";
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
var res = await graphClient.Users["[email protected]"].Calendars.Request().GetAsync();
如果你想有一個允許用戶先登錄并且他們可以查詢自己的日歷事件的功能,那么你需要先集成 OIDC 集成 AAD 進行身份驗證,然后你可以使用await graphClient.Me.Calendars.Request().GetAsync(). 更多細節可以在這個示例中看到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/518146.html
上一篇:ASP.NETCoreWebAPI為請求客戶端發送400BadRequest
下一篇:如何將依賴項注入物體模型?
