Единый вход в приложение UWP с использованием учетной записи Microsoft не работает должным образом - PullRequest
0 голосов
/ 04 июля 2018

Я наблюдаю сценарий, когда пользователь нашего приложения UWP должен вводить свой пароль все время, когда он входит в систему (используя свою учетную запись Microsoft).

- Ожидание

Пользователь входит в наше приложение UWP под своим именем пользователя и паролем учетной записи Microsoft (например, mrBigglesworth@mydomain.onmicrosoft.com). Нормальное диалоговое окно «Оставаться в системе?» Отображается с флажком «Больше не показывать». Пользователь выбирает «Да» в этом диалоговом окне. Последующие входы в приложение одного и того же пользователя не отображают экраны входа. По сути, это создает единый вход.

Так работало наше приложение до обновления Windows 10 в апреле 2018 года с существующим кодом (см. Ниже). Насколько я могу судить, это обновление не работает.

- Что происходит

Диалоговое окно «Оставаться в системе?» Вообще не отображается. Таким образом, пользователь должен предоставить пароль каждый раз. Даже если я очищаю файлы cookie, кеширую и выполняю вход с новым пользователем (ранее не использовался) или удаляю приложение, я все равно должен предоставить пароль - каждый раз. Мы не используем ADFS, но так было и в прошлом, когда все «работало».

Наше приложение UWP - это размещенное веб-приложение, которое переносит пользователей на существующий веб-портал. Когда я использую браузер, очищаю кеш, а затем снова захожу, все работает как положено, и я вижу сообщение «Оставаться в системе?» Диалог. Итак, в функциональности UWP чего-то не хватает.

- Что сделано

Наше приложение UWP использует элемент управления WebView для отображения нашего веб-портала. У меня есть функция «Выход пользователя из системы», которая удаляет все файлы cookie для известных доменов (см. Список ниже) и очищает кэш WebView. Список доменных имен был составлен с помощью инструмента Fiddler для отслеживания всех URL / трафика при входе в наш веб-портал. Этот код раньше работал должным образом (т. Е. Пользователь выходил из системы и снова входил в систему, вызывая диалог «Оставаться в системе?»). Я тоже пытался удалить приложение, но без радости (используя удаление правой кнопкой мыши, как сценарий Azure PowerShell - «Get-AppxPackage |? {$ _. IsDevelopmentMode -eq« True »} | Remove-AppxPackage").

Фрагмент кода C # для удаления cookie и очистки кэша WebView приведен ниже (некоторые специфичные для бизнеса строки были изменены для защиты невинных).

private static readonly string[] AllCookieDomains = {
    "https://login.microsoftonline.com",
    "https://login.mydomain.com",
    "https://mydomain-us.azurewebsites.net",
    "https://mydomaingraph-us.azurewebsites.net",
    "https://mydomainlogin.azurewebsites.net",
    "https://login.microsoftonline.com",
    "https://mydomainapps.azurewebsites.net",
    "https://secure.aadcdn.microsoftonline-p.com",
    "https://login.microsoftonline.com/common/login",
    "https://login.microsoftonline.com/common/oauth2/authorize"
};

foreach (string domainName in AllCookieDomains)
{
    if (!String.IsNullOrWhiteSpace(domainName))
    {
        Uri aUri = new Uri(domainName);

        foreach (var cookie in baseFilter.CookieManager.GetCookies(aUri))
        {
            baseFilter.CookieManager.DeleteCookie(cookie);
        }
    }
}

await WebView.ClearTemporaryWebDataAsync();
var filter = new HttpBaseProtocolFilter();
filter.ClearAuthenticationCache();

Возможно, я установил флажок "Больше не показывать" в диалоговом окне "Оставаться в системе?" Не должно иметь значения, удаляю ли я куки / удаляю ли приложение, но если это применимо, как его сбросить?

Любая помощь / помощь будет принята с благодарностью.

Дополнительная информация:

Если вы спрашиваете о моем коде WebView, то выписка из моей главной страницы:

<Grid x:Name="MainViewGrid" Grid.Row="1" Grid.ColumnSpan="8" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ScrollViewer HorizontalScrollMode="Disabled" VerticalScrollMode="Enabled" HorizontalScrollBarVisibility="Hidden"
                  VerticalScrollBarVisibility="Auto">
        <WebView x:Name="MainWebView" Source="{x:Bind ViewModel.WebViewSource, Mode=OneWay}" Margin="4,0,4,4"
                 NavigationStarting="MainWebView_NavigationStarting" NavigationCompleted="MainWebView_NavigationCompleted"
                 NewWindowRequested="MainWebView_NewWindowRequested" DefaultBackgroundColor="White"
                 ContainsFullScreenElementChanged="MainWebView_ContainsFullScreenElementChanged" RightTapped="MainWebView_RightTapped"
                 UnviewableContentIdentified="MainWebView_UnviewableContentIdentified" DOMContentLoaded="MainWebView_DOMContentLoaded">
        </WebView>
    </ScrollViewer>
</Grid>

Просмотр модели WebViewSource = new Uri (SkoolerResources.SkoolerLoginUrl_Metadata); // Первый URL для нашего приложения: 'https://login.skooler.com/common/Metadata'.

Затем он перенаправляет на login.microsoftonline.com (поскольку пользователь не авторизован).

Пожалуйста, обратите внимание, что все это работает, как и ожидалось, когда я использую наш портал с помощью браузера. Таким образом, некоторая информация для входа в систему в WebView сохраняется или нет - что вызывает проблему с SSO.

Спасибо

1 Ответ

0 голосов
/ 11 июля 2018

Очистка куки браузера должна сбросить состояние и очистить настройку «Больше не показывать».

Некоторые причины, по которым диалоговое окно «Оставаться в системе» не отображается, включают:

  1. В браузере ранее использовался другой аккаунт (это состояние также удаляется путем очистки файлов cookie, как указано выше)
  2. Некоторая форма единого входа, настроенная в браузере
  3. Загружен в размещенном веб-просмотре

Если вышеизложенное не решает эту проблему для вас, пришлите мне, пожалуйста, трассировку логина, где не отображается диалоговое окно «Оставаться в системе», и я могу выяснить, почему оно было подавлено.

...