Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Microsoft帐户单一登录UWP应用程序未按预期工作_C#_Webview_Uwp_Single Sign On - Fatal编程技术网

C# 使用Microsoft帐户单一登录UWP应用程序未按预期工作

C# 使用Microsoft帐户单一登录UWP应用程序未按预期工作,c#,webview,uwp,single-sign-on,C#,Webview,Uwp,Single Sign On,我正在经历一个场景,我们的UWP应用程序用户在登录时(使用其Microsoft帐户)必须始终键入密码 -期望值 用户使用其Microsoft帐户用户名和密码(例如。mrBigglesworth@mydomain.onmicrosoft.com). 正常的“保持登录”对话框会显示“不再显示此内容”复选框。用户在此对话框中选择“是”。同一用户随后登录应用程序时,不会显示登录屏幕。实际上,这创造了单一登录体验 这就是我们的应用程序在2018年4月使用现有代码更新Windows 10之前的工作方式(见下

我正在经历一个场景,我们的UWP应用程序用户在登录时(使用其Microsoft帐户)必须始终键入密码

-期望值

用户使用其Microsoft帐户用户名和密码(例如。mrBigglesworth@mydomain.onmicrosoft.com). 正常的“保持登录”对话框会显示“不再显示此内容”复选框。用户在此对话框中选择“是”。同一用户随后登录应用程序时,不会显示登录屏幕。实际上,这创造了单一登录体验

这就是我们的应用程序在2018年4月使用现有代码更新Windows 10之前的工作方式(见下文)。据我所知,这是使事情无法进行的更新

-发生了什么事

“保持登录”对话框根本不显示。因此,用户每次都必须提供密码。即使我清除Cookie、缓存并与新用户(以前未使用过)登录,或者卸载应用程序,我仍然必须提供密码–每次。我们没有使用ADF,但在过去,当事情“起作用”时也是如此

我们的UWP应用程序是一个托管的Web应用程序,它将用户带到我们现有的Web门户。当我使用浏览器时,清除缓存,然后再次登录,一切正常,我确实看到“保持登录”对话框。因此,UWP功能缺失了一些东西

-已经做了什么

我们的UWP应用程序使用WebView控件来显示我们的门户网站。我有一个“注销用户”功能,可以删除已知域的所有cookie(见下面的列表)并清除WebView缓存。域名列表是在Fiddler工具的帮助下编制的,用于在登录我们的门户网站时监控所有URL/流量。此代码以前按预期工作(即用户注销并再次登录会生成“保持登录”对话框)。我也尝试过卸载该应用程序,但没有任何乐趣(使用右键单击卸载,就像Azure PowerShell脚本一样小-“Get-AppxPackage”?{$\uu0.IsDevelopmentMode-eq“True”}删除AppxPackage”)

下面是用于删除cookie和清除WebView缓存的C#代码片段(一些特定于业务的字符串已被更改以保护无辜者)

我可能已选中“保持登录”对话框上的“不再显示此内容”框。如果我删除cookies/卸载应用程序,这应该无关紧要,但如果适用,如何重置它

如有任何帮助,将不胜感激

其他信息:

如果您询问我的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=新Uri(SkoolerResources.SkoolerLoginUrl\u元数据); //我们应用程序的第一个URL是“”

然后重定向到login.microsoftonline.com(因为用户未经授权)

请注意,当我使用浏览器使用我们的门户网站时,一切正常。因此,WebView中的某些登录信息是否被保留-这导致了SSO问题


谢谢

清除浏览器cookies将重置状态并清除“不再显示此内容”设置

“保持登录”对话框不会显示的原因包括:

  • 以前在浏览器中使用过不同的帐户(此状态也是 通过清除Cookie(如上所述)删除)
  • 在浏览器中设置某种形式的SSO
  • 加载到托管的Web视图中

  • 如果上述方法无法为您解决此问题,请向我发送一个fiddler跟踪的登录信息,其中“保持登录”对话框未显示,我可以了解其被抑制的原因。

    我已尝试使用webview控件加载包含Micrsoft登录模块的网站。即使重新加载页面,它也能工作。你能展示更多关于我们网站的信息吗?你好,尼科。谢谢你的评论。当你说“它有效”时,你的意思是你可以成功登录吗?我也可以。问题是登录到“”后,我没有看到“保持登录”对话框。我相信,这使得SSO无法工作。@'Nico Zhu-MSFT'-我在我的帖子中添加了其他信息。您是否在浏览器中测试门户网站?嗨。我主要对用户的SSO体验感兴趣。即,用户不应获得“输入凭据/密码”对话框。这在过去运行良好-用户在应用程序安装后第一次登录;随后的应用程序发布将直接将他们带到我们的主登录页。现在,它继续显示凭证/密码对话框。我的意思是,这与“保持登录”对话框有关,因为这是我在通过普通浏览器访问门户时看到的唯一区别&通过UWP应用程序中的WebView访问门户。我会设法找到小提琴手的踪迹。嗨,抱歉耽搁了。根据要求,我已从Fiddler处收集了会话跟踪。这里是链接:为了比较,我还加载了一个浏览器访问Web应用程序的跟踪。Web应用程序的行为符合预期(当我清除浏览器缓存时,会显示“保持登录”对话框)。链接:想知道是否有人有时间调查此事并提供任何信息。或者如果有什么我需要做的。非常感谢。
    <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>