Я выполняю простую аутентификацию AAD в новом приложении Windows 10 UWP. Он отлично работает, за исключением того, что я не хочу, чтобы пользователь вводил свои учетные данные каждый раз при запуске приложения. Насколько я понимаю, общий TokenCache по умолчанию должен делать это автоматически, но диалоговое окно аутентификации появляется при первом вызове AcquireTokenAsync после запуска приложения.
Интересно, что я могу вызвать TokenCache.ReadItems(), и мой TokenCacheItem там.
Моя трассировка ADAL приведена ниже. Как видите, токен десериализован, но не считает его совпадением с текущим пользователем. Спасибо!
2016-02-27 18:30:56:8139 Type: Informational Id: 2 Message: '2/28/2016 12:30:56 AM: - TokenCache.cs: Deserialized 1 items to token cache.'
2016-02-27 18:30:56:8199 Type: Informational Id: 2 Message: '2/28/2016 12:30:56 AM: - AuthenticationContext.cs: ADAL WinRT with assembly version '2.21.0.0', file version '2.21.30122.1612' and informational version '99c728ed4636738ad0f97ca000a9d88cc5b75cc0' is running...'
2016-02-27 18:30:56:8364 Type: Informational Id: 2 Message: '2/28/2016 12:30:56 AM: 12cc879d-1196-43ef-9e03-389a69dd4432 - AcquireTokenHandlerBase.cs: === Token Acquisition started:
Authority: https://login.windows.net/common/
Resource: https://management.core.windows.net/
ClientId: 486c0900-9582-4672-92af-37013e31958d
CacheType: Microsoft.IdentityModel.Clients.ActiveDirectory.TokenCache (1 items)
Authentication Target: User
'
2016-02-27 18:30:56:8569 Type: Informational Id: 2 Message: '2/28/2016 12:30:56 AM: - TokenCache.cs: Deserialized 1 items to token cache.'
2016-02-27 18:30:56:8589 Type: Verbose Id: 1 Message: '2/28/2016 12:30:56 AM: 12cc879d-1196-43ef-9e03-389a69dd4432 - TokenCache.cs: Looking up cache for a token...'
2016-02-27 18:30:56:8679 Type: Informational Id: 2 Message: '2/28/2016 12:30:56 AM: 12cc879d-1196-43ef-9e03-389a69dd4432 - TokenCache.cs: No matching token was found in the cache'
2016-02-27 18:30:56:8989 Type: Informational Id: 2 Message: '2/28/2016 12:30:56 AM: 12cc879d-1196-43ef-9e03-389a69dd4432 - AcquireTokenInteractiveHandler.cs: Cannot access user information to determine whether it is a local user or not due to machine's privacy setting.'
Обновление Благодаря ссылке, предоставленной Канишкой, я смог решить эту проблему. Я настоятельно рекомендую прочитать полный пост, но вот что я в итоге сделал:
_authenticationContext = new AuthenticationContext("https://login.windows.net/common");
var tokenCacheItem = _authenticationContext.TokenCache.ReadItems().FirstOrDefault();
if (tokenCacheItem != null)
{
_authenticationContext = new AuthenticationContext($"https://login.windows.net/{tokenCacheItem.TenantId}");
}