通过C#Windows窗体中的IE浏览器传递AD身份验证凭据

时间:2008-11-05 22:27:55

标签: c# .net winforms internet-explorer windows-authentication

我们有一个Windows窗体应用程序,它承载IE浏览器控件。我们的用户运行应用程序并打开存储在MOSS中的文档的链接。我们正在尝试将应用程序设置为传递服务帐户的凭据,以便我们可以避免让所有用户访问MOSS站点。我们使用了here找到的代码,如果用户当前未登录我们的域,则该代码似乎正常。但是,对于已经对域进行了身份验证的任何用户,应用程序似乎都没有通过服务帐户身份验证。在这种情况下,它似乎只使用经过身份验证的用户凭据。

有谁知道我们如何才能做到这一点?

谢谢!

杰夫

3 个答案:

答案 0 :(得分:2)

在您所指向的网站的Internet区域下运行?即使您使用自己的浏览器控件,它仍然会在某个区域中。使用普通浏览器转到相关站点,确定它所在的区域,并确定它所在的区域                                                   alt text http://img219.imageshack.us/img219/7162/internetzonenp8.jpg

如果该特定区域自动登录,则会记录您的登录凭据。但是,如果您未以有效域用户身份登录,则不接受这些本地Windows凭据,并且它似乎依赖于您提供的代码提供的凭据。                                                    alt text http://img230.imageshack.us/img230/407/settingskm3.jpg

如果安全性不是一个大问题,那么在服务帐户凭据下运行的应用程序池下运行现有网页也许是有意义的。请记住将服务帐户添加到工作进程组,并关闭集成身份验证功能。

我从过去经验丰富的学习中了解到,通过将全局组添加到本地组中,并且可能在服务器上授予该本地组权限,通常更加健壮且可维护。但现实世界有时会变得混乱,这当然不总是实用或最好的解决方案。

我希望这可以回答你的一些问题,但我认为它不会回答所有这些问题。如果有一个特定区域你想要更多信息,如果我能回答它,我很乐意提供帮助。

最诚挚的问候 Rihan

答案 1 :(得分:0)

模仿在这里没有帮助吗?您可以在您正在讨论的服务帐户用户的幌子下运行该位代码(表单),然后浏览器控件应在相同的上下文中运行。

以下链接可能会有所帮助;

http://msdn.microsoft.com/en-us/library/b80a7e92.aspx

http://www.buro9.com/blog/2006/10/06/impersonating-a-user-in-c/

答案 2 :(得分:0)

我的理解是,应用程序中的IE控件将根据Windows会话中的凭据自动登录到MOSS站点。您希望它始终使用您指定的帐户,并编码到应用程序中?

IE使用一种Kerberos身份验证(Windows集成身份验证)

自动登录域名站点

三个建议;

  • 请勿使用MOSS站点的WINS名称,而是使用IP地址(也可以使用DNS名称,例如http://moss-server而不是http://moss-server.domain.com)。这个 应该导致IE不自动登录该网站。
  • 更改Web服务器上的身份验证模型以使用Basic 仅(安全警告 - 明文 密码交换)
  • 禁用“启用集成Windows”选项 在网络浏览器中进行身份验证。 这将使访问任何网站 在域中痛苦......

我的建议是第一个。使用不同的地址使IE认为它没有访问受信任的站点,因此不使用集成身份验证。

所有都可以在应用程序之外使用IE进行测试。简单启动IE并输入您正在使用的地址到MOSS站点。如果要求您输入密码,则可以使用解决方案。