簡體   English   中英

無法在 C# 中獲取 Azure AD 令牌

[英]Not able to get Azure AD token in C#

我正在嘗試使用以下代碼獲取 azure 廣告令牌

AuthenticationContext authContext = new AuthenticationContext(authority);
string token = authContext.AcquireTokenAsync(resourceUri, clientID, 
                                             new Uri(redirectUri), 
                                             new PlatformParameters(PromptBehavior.Auto))
                          .Result.AccessToken;

但是在輸入用戶名密碼和 otp 進行雙因素身份驗證后,出現以下錯誤

“錯誤”:“invalid_client”,
“error_description”:“AADSTS7000218:請求正文必須包含以下參數:‘client_assertion’或‘client_secret’。
跟蹤 ID:1b452e84-a304-483e-adab-e19d1da28900
關聯 ID:bbcfb9f5-999c-493d-bdea-5ef44c70ac1c
時間戳:2023-01-04 03:25:22Z"
“錯誤代碼”:[7000218],
“時間戳”:“2023-01-04 03:25:22Z”,
“trace_id”:“1b452e84-a304-483e-adab-e19d1da28900”,
“correlation_id”:“bbcfb9f5-999c-493d-bdea-5ef44c70ac1c”,
“error_uri”:“https://login.microsoftonline.com/error?code=7000218”

請解決問題

AuthenticationContext.AcquireTokenAsync 方法已過時。 要使用交互式流程遷移應用程序,請參閱https://aka.ms/adal-to-msal.net/interactive

我試圖在我的環境中重現相同的內容並得到如下相同的錯誤:

GET https://login.microsoftonline.com/tenantId/oauth2/token

client_id : xxxxxx-xxx-xxx-xxxx-xxxxxxxx
grant_type : password
resource : resource
username : ruk@********.onmicrosoft.com
password : ******

在此處輸入圖像描述

請注意:如果 Azure AD 應用程序不是公共客戶端,則需要client_secret 為避免您的 Azure AD 應用程序公開,您可以創建並傳遞client_secret

如果您想在沒有client_secret的情況下生成訪問令牌,請在您的 Azure AD 應用程序中啟用Allow public client flows setting

在此處輸入圖像描述

生成訪問令牌而不傳遞 client_secret:

在此處輸入圖像描述

我同意wboslandAcquireTokenAsync已過時,您需要通過參考此MsDoc使用 MSAL.NET 來實現您的方案:

var authResult = await pca.AcquireTokenInteractive(new[] { "User.Read" })
.WithAccount(accountToLogin) 
.WithParentActivityOrWindow(myWindowHandle) 
.ExecuteAsync();
}

正如您在評論中提到的,您正在使用客戶端憑證流,該流用於無需用戶交互的服務到服務通信。

參考:

獲取令牌以交互調用 web API

AuthenticationContext.AcquireTokenAsync 方法

暫無
暫無

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

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