WebAccount SignOutAsync() не удаляет учетную запись / токен из локального кэша

Наше приложение UWP использует Azure AD для аутентификации. Когда я запустил приложение, мне предложили войти, что я и сделал, и аутентификация прошла успешно. Теперь я не могу вернуться в состояние "выписан". Всякий раз, когда я запускаю приложение, я автоматически выполняю вход. Я позвонил SignOutAsync() на веб-счет, но, похоже, не имеет никакого эффекта.

Сначала я называю это:

private async Task SignOutAccountAsync(WebAccount account)
{
    // remove local settings                
    ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserWebAccountProviderId");
    ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserWebAccountId");
    await account.SignOutAsync();                
}

И затем я вызываю следующее, которое успешно и регистрирует меня, не требуя никакого взаимодействия.

WebTokenRequest wtr = new WebTokenRequest(wap, string.Empty, clientId);
wtrr = await WebAuthenticationCoreManager.RequestTokenAsync(wtr);

Как выйти из системы и заставить пользователя повторно пройти аутентификацию в приложении?

Редактировать: Вот более понятный пример, где я вхожу, выхожу, создаю экземпляры всех объектов, использованных для входа, а затем снова захожу.

// silent login
wtrr = await WebAuthenticationCoreManager.RequestTokenAsync(wtr);
userWebAccount = wtrr.ResponseData.First().WebAccount;

// sign out
await userWebAccount.SignOutAsync();

// use new objects to try again
wap = await WebAuthenticationCoreManager.FindAccountProviderAsync("https://login.microsoft.com", authority);
wtr = new WebTokenRequest(wap, string.Empty, clientId);
wtr.Properties.Add("resource", resource);

// silent login works again, despite having called SignOutAsync().
wtrr = await WebAuthenticationCoreManager.RequestTokenAsync(wtr);

1 ответ

Я думаю, что вам может не хватать здесь, что вы удаляете значения из локальных настроек, но объекты wap и clientId по- прежнему имеют значения, которые впоследствии могут быть доступны пользователю для входа. войдите в систему, или, если они являются локальными для класса, очистите их при выходе.

private async Task SignOutAccountAsync(WebAccount account)
{
    // remove local settings                


 ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserWebAccountProviderId");
    ApplicationData.Current.LocalSettings.Values.Remove("CurrentUserWebAccountId");
    wap = "";
    clientId = "";
    await account.SignOutAsync();                
}
Другие вопросы по тегам