1
Azure訪問令牌在多線程環境中運行時即使使用無效密鑰也會返回。Azure以無效的客戶端密鑰返回有效的訪問令牌
我有一個集成測試,檢查無效的客戶端密鑰在獲取Azure訪問令牌時不會通過。
當隔離運行時,測試每次都會通過,這意味着無效的客戶端密鑰不會返回Azure訪問令牌。
但是,當與其他集成測試(在多個線程上)一起運行時,即使明顯無效的客戶端密鑰,此函數也會返回訪問令牌。
我沒有看到任何合法的原因,即使指定了一個完全無效的客戶端密鑰,這也是客戶端ID的緩存令牌。
請注意,當客戶端ID無效時,不會發生此行爲。
對此行爲有解釋嗎?
private async Task<string> GetAccessToken(string authority, string resource, string scope)
{
var clientCredential = new ClientCredential(clientId, clientSecret);
var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
var result = await context.AcquireTokenAsync(resource, clientCredential);
Debug.WriteLine("----------------------------------");
Debug.WriteLine(clientId);
Debug.WriteLine(clientSecret);
Debug.WriteLine(result.AccessToken);
return result.AccessToken;
}
調試輸出
Debug Trace:
----------------------------------
<...client id...>
invalid secret
<...valid token...>
有趣的是,它並不關心訪問緩存時的祕密。如果單獨的線程可能從外部來源引入,並且他們可以訪問客戶端ID但不是祕密,那麼這不是一種安全風險嗎?這聽起來像我需要找到一種方法來刷新緩存,或者對它進行更多的控制。 –
基於我的理解,具有祕密的網絡應用程序是一個機密的應用程序。這意味着我們應該確保它在安全的環境中運行,而祕密總是通過您的應用程序(從服務器端提供)來證明其身份。你會在你的場景中分享更多關於使用不正確祕密的信息嗎? –
我不知道我有一個場景,這將是一個問題,但重要的是要了解這是如何工作,以便我不會引入問題。 –