[英]How to retrieve an MS Graph access token for a .NET Core Web API without user sign in
[英]ImmutableID of the user missing when trying to acquire a token for MS Graph API (Windows auth)
我正在開發一個 API,它使用 Microsoft Graph 客戶端 SDK 對 Sharepoint 站點進行多次調用。
為了對調用 API 的用戶進行身份驗證,我使用集成的 Windows Provider 方法,代碼非常簡單:
var clientApp = PublicClientApplicationBuilder
.Create(_apiSettings.Value.AzureClientId)
.WithTenantId(_apiSettings.Value.AzureTenantId)
.Build();
var token = clientApp.AcquireTokenByIntegratedWindowsAuth(new string[] { _apiSettings.Value.MicrosoftGraphApiScopeUrl })
.ExecuteAsync().Result;
在本地調用包含此代碼的方法時,它可以完美運行。 但是當我將應用程序部署到我們的測試服務器時,並通過與本地用戶相同的用戶使用 NTLM 身份驗證,我遇到了這個錯誤:
Microsoft.Identity.Client.MsalUiRequiredException:AADSTS90020:SAML 1.1 斷言缺少用戶的 ImmutableID。
打印 HttpContext.User 的內容時,我看到連接到同一組的同一用戶同時用於“在線”和本地版本。
我已經嘗試添加這個 header,但它什么也沒做:
var immId = new Dictionary<string, string>();
immId.Add("Prefer", "IdType=\"ImmutableId\"");
var token = clientApp.AcquireTokenByIntegratedWindowsAuth(new string[] { _apiSettings.Value.MicrosoftGraphApiScopeUrl })
.WithExtraHttpHeaders(immId)
.ExecuteAsync().Result;
我能做什么?
謝謝!
如果您的應用程序沒有管理員同意該應用程序。您將獲得MsalUiRequiredException
。
嘗試將管理員同意添加到應用程序。
或者嘗試添加租戶管理員,在應用程序注冊的 API 權限選項卡上選擇授予/撤銷{租戶域} 管理員同意按鈕。 有關詳細信息,請參閱添加權限以訪問您的 web API 。
有關更多詳細信息,請參閱此文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.