【问题标题】:WebBrowser Control with Google 2-Step Verification带有 Google 两步验证的 WebBrowser 控件
【发布时间】:2021-02-06 02:59:51
【问题描述】:

我们有一个类库,它使用 .NET WebBrowser 控件来授权对第三方 API 的访问,无论是使用第三方的 oAuth2 授权流程还是使用 Google 两步验证(又名 2-factor/multi -因素身份验证等)。

第一个流程运行良好;提示用户输入他们的电子邮件和密码,然后单击确认。没有问题。

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

我们的代码为WebBrowserDocumentCompleted 事件实现了一个事件处理程序,并且每当页面更新时都会按预期触发。不过,它不会在用户通过他们的设备确认后触发。

我已经在网络上进行了相当不错的搜索,并因此获得了有关正在发生的事情的提示,我还查看了 WebView2CefSharp 但后者需要一个额外的 C++ 库,我' d 宁愿不捆绑或不必担心,前者在花了几个小时试图让一个基本的演示工作(并且失败)之后处于一个非常新的开发状态。

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

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

【问题讨论】:

  • 我建议运行 C:\Windows\System32\F12\IEChooser.exe 来查看 JS 控制台或观察网络流量。

标签: c# .net class-library


【解决方案1】:

嗯,解决方案实际上与其他一些帖子类似,尤其是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 配置单元,不应该需要任何提升的权限。而且我看到其他应用程序已经添加了关键条目,例如 OutlookSourceTreeZoom

【讨论】:

    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多