NT authentication login
我在一个用户可以登录以获取更多私人信息的网站上工作。
他们想要做的是在私有区域下的我正在工作的站点上有一个 是否有可能做到这一点? 我将如何实现? 有一个更好的方法吗? 这是一个(未经实验的)理论,其细节在很大程度上取决于Sharepoint网站将接受哪种身份验证类型。我将处理Basic,因为这是最简单的。 您将编写一些使用XMLHttpRequest的JavaScript来向Sharepoint站点提交请求,并将其用户名和密码添加到请求标头中。他们的浏览器将运行该JavaScript,并登录到Sharepoint网站。 现在,当他们单击链接时,客户端的浏览器应该具有缓存的凭据才能发送到Sharepoint站点。 可能的问题:
另一个选择是代理与Sharepoint的连接,这使您可以登录服务器端(绕过XHR限制和浏览器安全性)-但需要在服务器上加载负载,并且可能会遇到一些URL目标问题。 如果没有NTLM挑战,您的用户将无法直接连接到NTLM站点。我会写一些可以有效替代NTLM站点的内容;即您的服务器端代码将具有连接到NTLM站点的凭据,并通过用户的请求进行传递。 正如您所提到的,SharePoint(请注意)要记住,SharePoint有许多Web服务可用于此目的(而不是进行屏幕抓取)。 这是Intranet环境吗?如果是这样的话,他们无论如何都不必登录。如果使用"集成身份验证"设置了sharepoint,并且该站点在IE中被列为受信任站点,则浏览器将使用该站点的网络凭据进行自动登录。也可以在firefox上设置。 如果您需要通过第二个站点进行身份验证,则可能需要产生一个新线程并调用Windows LogonUser API。获得安全令牌后,将其分配给新线程并通过该线程进行连接。 LogonUser需要增强的特权,并且不是托管代码,因此使用它会遇到一些严重的问题。但这是我能够找到让经过Forms身份验证的站点与Windows Authenticated Service / Site通信的唯一解决方法。 希望这可以帮助。 另一个站点将如何验证您的用户名和密码? 理想情况下,您的站点甚至不应该记住用户的密码才能将其传递到另一个站点(您存储密码的哈希,而不存储密码本身,并且仅在验证期间使用实际密码)。 如果您的站点向用户提供了令牌,该用户将令牌提供给新站点,又又要求您的站点验证令牌,该怎么办。基本上,第二个站点是信任您告诉他们用户的身份。 如果第二个站点实际上仅将Windows帐户用于获取用户名(例如,对基础文件的权限)以外的其他用途,则所有操作都将失败,因为在这种情况下,该用户没有以实际的Windows用户帐户身份登录。 |