单点登录的Winforms Web浏览器控件

本文关键字:浏览器 控件 Web Winforms 登录 单点 | 更新日期: 2023-09-27 18:09:20

我有一个Winforms应用程序,它承载了一个web浏览器控件。在此控件中,您还可以导航到预先确定的外部网站。

我需要实现单点登录,这样用户就不需要在每个已知的外部网站进行身份验证。我已经有一些想法了,但如果能听听你的意见就太好了。

最好的方法是什么?

事实上,已经有这样的东西了吗?(编辑:浏览器如何记住登录/密码)?

欢呼

单点登录的Winforms Web浏览器控件

通常由站点负责实现SSO,然后客户机将自动响应站点。由于web浏览器控件使用IE,因此它继承了与web浏览器相同的功能。例如,如果站点使用Windows身份验证,则控件将在站点发出质疑后进行身份验证,而无需用户干预。类似地,如果站点使用SAML 2.0,该控件将执行必要的重定向。

由于这些是外部网站,我不得不假设Windows身份验证不会很好地工作,因为服务器和客户端在不同的域上。因此,类似SAML的东西听起来是最安全的选择。

似乎实现SAML对你来说是一个问题,你需要手动完成并提交在控件内加载的web表单。这可以通过访问DOM实现,但它很快就成为一个难以维护的解决方案。

web浏览器控件提供了一个文档属性,它给你一个HtmlDocument对象,允许你在页面中查找元素和执行JavaScript。您需要使用这些机制来自动执行身份验证。步骤可能如下所示:

  1. 捕获URL,或者一些cookie,它会让你知道是否需要通过检查web浏览器控件属性进行身份验证。你可能想看看OnNavigate()。
  2. 进入文档并填写表单值
  3. 调用JavaScript的submit函数来提交表单,或者注入一些JavaScript来完成这个任务。我发现在很多情况下,将JavaScript插入页面比编写更复杂的c#代码更容易。在普通浏览器中创建原型更容易。

除非所有网站都共享一个共同的可信身份验证机制(如OpenID),否则您将受困于为每个网站编写自定义代码。

浏览器记住单个站点的密码。我不会称其为"单点登录",单点登录是一种使用受信任的权威来跨多个不同的网站进行身份验证的方法,这些网站都依赖于该权威来验证用户的身份。

当您要求SSO包已经这样做时,一些示例如下:

    RSA ClearTrust
  • CA SiteMinder