使用ADAL我有兩個AuthenticationContext
使用持久化在SQL中的令牌緩存。AcquireTokenSilent always無法無聲獲取令牌
使用AcquireTokenByAuthorizationCode
它在數據庫中寫入令牌,但使用AcquireTokenSilent
時,我總是得到
失敗默默獲得令牌。調用方法AcquireToken
下面是複製的細節問題:
我創建一個Context
AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));
然後我AcquireToken通過授權
authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential);
在這一點上,將條目保存在數據庫中
然後,如果我打電話給我,我會得到一個異常。
authContext.AcquireTokenSilent(_authority, _clientCredential, new UserIdentifier(companyId.ToString(), UserIdentifierType.UniqueId)).AccessToken;
我也試過同樣的結果:
authContext.AcquireTokenSilent(_authority, _clientId).AccessToken;
authContext.AcquireTokenSilent(_authority, _clientCredential, UserIdentifier.AnyUser).AccessToken;
我發表我的this GistAzureAdalCache
實施。
Cache的每個條目都是like this。
我失蹤了什麼?
更新
基於對@vibronet的評論答案我有這個
AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));
authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential, _eWSResource);
string result = authContext.AcquireTokenSilent(_eWSResource, _clientId, UserIdentifier.AnyUser).AccessToken;
另請注意,在ADAL的某些版本中,TenantId和用戶的UniqueId的GUID均爲大小寫因爲它們必須小寫才能使緩存正確加載它們。 – Andacious
任何示例代碼都會有所幫助。因爲AcquireTokenByAuthorizationCodeAsync將有不同的參數。 – Kurkula