1

我正在一个用户可以登录以获取更多私人信息的网站上工作。我的客户有另一个站点,它使用nt 身份验证来访问它。

他们想要做的是button在我正在处理的站点上的私有区域下有一个将他们发送到nt 身份验证的站点,但不要求他们登录到该站点,而是传递他们用来登录的用户名密码为他们进入我的站点到另一个站点。

是否有可能做到这一点?我将如何完成它?有一个更好的方法吗?

4

5 回答 5

1

这是一个(未经测试的)理论,其细节很大程度上取决于 Sharepoint 站点将接受的身份验证类型。我将解决Basic,因为它是最简单的。

您将编写一些使用 XMLHttpRequest 向 Sharepoint 站点提交请求的 JavaScript,并将其用户名和密码添加到请求标头中。他们的浏览器将运行该 JavaScript,并登录到 Sharepoint 站点。

现在,当他们单击链接时,客户端的浏览器应该有缓存的凭据以发送到 Sharepoint 站点。

可能的问题:

  • XMLHttpRequest 不允许跨域认证
  • 浏览器和 XHR 不共享身份验证信息
  • Sharepoint 和 XHR 无法就身份验证方法达成一致

另一种选择是代理到 Sharepoint 的连接,这允许您登录服务器端(绕过 XHR 限制和浏览器安全性) - 但需要在您的服务器上加载并且可能存在一些 URL 目标问题。

于 2008-09-04T21:22:09.607 回答
0

其他站点将如何验证您的用户名和密码?

理想情况下,您的站点甚至不应该记住用户的密码才能将其传递给另一个站点(您存储密码的哈希值,而不是密码本身,并且仅在验证期间使用实际密码)。

如果您的站点向用户提供了一个令牌,用户将该令牌提供给新站点,这反过来又要求您的站点验证该令牌,该怎么办。基本上,第二个站点信任您告诉他们用户是谁。

如果第二个站点实际上将 Windows 帐户用于检索用户名(例如对基础文件的权限)以外的任何事情,这一切都会崩溃,因为在这种情况下,用户没有作为实际的 Windows 用户帐户登录。

于 2008-09-04T16:49:51.443 回答
0

如果您需要针对第二个站点进行身份验证,您可能需要生成一个新线程并调用 windows LogonUser API。获得安全令牌后,将其分配给新线程并通过该线程进行连接。

LogonUser 需要增强的权限,并且不是托管代码,因此使用它时会遇到一些非常严重的问题。但这是我能够找到的唯一解决方法,以使经过 Forms 身份验证的站点与 Windows Authenticated Service/Site 对话。

希望这可以帮助。

于 2008-09-04T20:58:42.440 回答
0

这是内网环境吗?如果是这样,他们无论如何都不应该登录。如果 sharepoint 是使用“集成身份验证”设置的,并且该站点在 IE 中被列为受信任站点,则浏览器将使用该网络凭据进行自动登录。这也可以在Firefox上设置。

于 2008-09-04T21:18:29.630 回答
0

如果没有遇到 NTLM 质询,您的用户将无法直接连接到 NTLM 站点。我会写出可以有效代理 NTLM 站点的内容;即,您的服务器端代码将具有连接到 NTLM 站点的凭据,并且它通过来自您的用户的请求。

正如您提到它是 SharePoint ( spit ) 请记住,SharePoint 有一堆您可以用于此的 Web 服务(而不是进行屏幕抓取)。

于 2008-09-04T21:29:33.877 回答