簡體   English   中英

實施“資源所有者密碼憑據授予”時出現的問題

[英]Issue when implementing “Resource Owner Password Credentials Grant”

我嘗試在Azure AD方案上實施“資源所有者密碼憑據授予”。

我有一個Web API(DemoWebApi)和一個控制台(DemoConsole)聲明為本機應用程序。 我能夠使“授權代碼授予”和“客戶端憑據授予”正常工作,但是“資源所有者密碼憑據授予”遇到了一些問題。

首先,我閱讀了以下內容: http : //www.cloudidentity.com/blog/2014/07/08/using-adal-net-to-authenticate-users-via-usernamepassword/

尤其是NO MSA部分。

所以我在Azure AD租戶中創建了一個用戶,現在我收到以下錯誤消息:

用戶或管理員不同意使用ID為'bd274da6-80f2-458a-b74b -...'的應用程序。 發送對此用戶和資源的交互式授權請求。

我不知道該怎么辦

這是我的源代碼:

string authority = "https://login.microsoftonline.com/7dda5ce2-2fb6-4f82-bc27-..."; 

AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);
UserPasswordCredential credentials = new UserPasswordCredential(login, password);
AuthenticationResult res = await authenticationContext.AcquireTokenAsync(webApiClientId, consoleClientId, credentials);

例如,如果您將其用作LoginController操作以提供自定義的登錄屏幕,那么值得一讀的是在我工作時遇到的一種情況。

即使對於不正確的密碼也發出了資源所有者密碼憑證流令牌

一次成功分配令牌后,即可獲得正確的密碼。

您可能需要調用登錄控制器來獲取訪問令牌以對用戶進行身份驗證。 現在,當您第一次通過AuthenticationContext獲取訪問令牌(通過提供所有必需的信息,例如客戶端ID,資源ID,租戶,憑據)時,您再次想要獲取訪問令牌,但是這次用戶提供了錯誤的密碼但正確的客戶端id,Azure AD仍然提供對象的訪問令牌。 沃拉!!!! 我已經遇到了這個問題,並且已經制作了5-10次這種情況以確保這種情況確實發生。

基於對Azure AD的理解,我得出結論:Azure AD將訪問令牌存儲在其TokenCache中,並且每當AuthenticationContext對象請求訪問令牌時,即使在驗證傳入的密碼憑據之前,它也會首先查找緩存,盡管它肯定會針對發行了哪個令牌。 這是事情開始變得有趣的時候,您將意識到它們到底是如何為錯誤的密碼提供訪問令牌的(記住:這種情況是您第一次獲得正確密碼的訪問令牌,然后是下次使用錯誤密碼的情況下仍然可以訪問)使用AuthenicationContext時的令牌)

如果您有類似的要求,要解決此可能的問題,您需要在從AcquireTokenAsync方法獲取AuthenticationResult之后立即清除身份驗證上下文對象的令牌緩存。

authenticationContext.TokenCache.Clear();

就是這樣:)。

我猜這從未被記錄過,並且我相信這對正在使用資源所有者憑證流來設計自定義登錄頁面的要求的任何人都會有所幫助。 盡管Azure嚴格建議使用它提供的其他身份驗證流。

您需要提供更多信息來幫助我們重現此問題,例如,如何使用azure門戶,powershell或visual studio注冊應用程序。新添加的用戶的用戶類型是什么以及如何添加該用戶。

如果直接傳遞用戶名和密碼,則用戶沒有任何同意的機會。 要解決此問題,您可以嘗試在門戶中授予該api的權限(最好使用管理員帳戶登錄):

在此處輸入圖片說明

暫無
暫無

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

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