WebAccount SignOutAsync () не удаляет учетную запись / токен из локального кэша - PullRequest
0 голосов
/ 09 октября 2018

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

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

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 Ответ

0 голосов
/ 09 октября 2018

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

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();                
}
...