微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有Google两步验证的WebBrowser控件

如何解决带有Google两步验证的WebBrowser控件

我们有一个类库,该类库使用.NET Webbrowser控件通过第三方的oAuth2授权流程或Google两步验证(也称为2因子)来授权对第三方API的访问/多因素身份验证等)。

一个流程工作正常;提示用户输入其电子邮件和密码,然后单击确认。没问题。

但是,一旦用户确认(通过他们的移动设备),第二个流程就会死亡。 Webbrowser控件中的弹出网页不会移至已验证页面,它只是坐在那里,就好像它在等待用户进行验证一样。

我们的代码WebbrowserDocumentCompleted事件实现了一个事件处理程序,每当页面更新时就会触发该事件处理程序。不过,在用户通过其设备确认后触发。

我在网络和SO上进行了相当不错的搜寻,以了解发生了什么事,我还查看了WebView2CefSharp,但是后者需要额外的C ++我不想捆绑或不必担心的库,而前一个库在花了几个小时试图使一个基本的演示工作(并失败)后才处于一种非常新的状态。

因此,如果有可能,我想提出一种继续使用Webbrowser控件的解决方案。

注意:我已经根据Version属性检查了正在使用的版本,它是11。我正在针对.NET 4.5.2的Windows 10 Pro计算机上使用VS 2019进行开发(以实现最大的向后兼容性)。

解决方法

好吧,解决方案实际上是根据其他一些帖子,尤其是this one

线索是2SV在我的计算机上的本地IE浏览器中工作正常。

最后,我在静态链接中添加了上面链接中发布的代码的修改版本:

private static void SetWebBrowserCompatibilityMode()
{
    uint iMode = 11001; // Default to Edge/IE11
    using (WebBrowser oBrowser = new WebBrowser())
    {
        switch (oBrowser.Version.Major)
        {
            case 10:
                iMode = 10001;
                break;
            case 9:
                iMode = 9999;
                break;
            case 8:
                iMode = 8888;
                break;
        }
    }
    using (RegistryKey oKey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",true))
    {
        oKey.SetValue(Path.GetFileName(Application.ExecutablePath),iMode,RegistryValueKind.DWord);
        oKey.Close();
    }
}

这不是理想的选择,因为它需要更改注册表,但是作为CURRENT_USER配置单元,应该不需要任何提升的特权。而且我看到其他应用程序已经添加了关键条目,例如 Outlook SourceTree Zoom

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。