Я наблюдаю сценарий, когда пользователь нашего приложения 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.
Спасибо