在C# Windows Form中通过IE浏览器传递AD身份验证凭据

3
我们有一个托管IE浏览器控件的Windows窗体应用程序。用户运行该应用程序并打开存储在MOSS中的文档链接。我们正在尝试设置应用程序以传递服务帐户的凭据,以便我们可以避免向所有用户授予对MOSS站点的访问权限。我们使用此处找到的代码,如果用户没有登录到我们的域,则似乎可以正常工作。但是,对于已经通过身份验证的域用户,该应用程序似乎无法传递服务帐户身份验证。在这种情况下,它似乎只使用已经过身份验证的用户凭据。

我们如何使此功能正常工作?


为什么不直接给“所有人”访问SharePoint网站的权限,或者将需要访问该网站的所有用户放入AD组中,然后将该组添加到SharePoint网站中。在这种情况下,模拟身份听起来像是一种黑客行为。 - Eric Schoonover
Jeff:抱歉重复了,我已经删除了这篇帖子,因为我没有打开你提供的链接。 - Sunny Milenov
spoon16 - 到目前为止,我们给了每个人访问权限,但出于审计原因,我们不想这样做。信息的访问是通过打开Windows表单的应用程序进行控制的,我们宁愿不让用户直接访问MOSS网站,而是使用服务帐户。 - Jeff C
3个回答

2
你所指向的网站运行在哪个Internet区域下?即使你使用自己的浏览器控件,它仍然会在某个区域中。通过使用普通浏览器访问相关站点来确定它所在的区域。
alt text http://img219.imageshack.us/img219/7162/internetzonenp8.jpg 如果该特定区域具有自动登录功能,则会使用您已登录的凭据。但是,如果您没有作为有效域用户登录,则这些本地Windows凭据将不被接受,并且似乎会退回到您提供的代码凭据。 alt text http://img230.imageshack.us/img230/407/settingskm3.jpg 如果安全性不是很重要,也许将现有的网页运行在一个应用程序池中,以服务帐户凭据运行,可能是有意义的。记得将服务帐户添加到工作进程组,并关闭集成身份验证功能。
我从以往的经验中得出结论,将全局组添加到本地组中,并在服务器上为该本地组授予权限通常更加稳健和可维护。但现实世界有时会很混乱,这显然并不总是切实可行或最佳解决方案。
我希望这回答了你的一些问题,但我认为它不会回答所有问题。如果你有任何特定领域需要更多信息,如果我能回答,我很乐意帮助。
最好的问候, Rihan

0

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

IE使用一种Kerberos身份验证(Windows集成身份验证)自动登录到域站点。

三个建议:

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

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

所有内容都可以在应用程序外使用IE进行测试。只需启动IE并输入您正在用于MOSS网站的地址即可。如果要求输入密码,则已找到解决方案。


0

不幸的是,模拟似乎没有帮助。根据提到的博客中的代码片段,模拟是有效的,但 IE 浏览器控件忽略了模拟,并且仍然使用底层 AD 用户对我的 MOSS 站点进行身份验证,即使在模拟之后实例化控件。 - Jeff C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接