【问题标题】:Authenticate Windows Authentication using Javascript使用 Javascript 验证 Windows 身份验证
【发布时间】:2011-07-19 13:38:17
【问题描述】:

我必须将我的客户从一个网站转移到另一个网站。这发生在客户端。在这个第二个网站,它使用windows基本认证系统。所以它会弹出登录窗口。我需要省略此弹出窗口并使用 javascript 在第二个网站上验证我的客户端,然后将他重定向到第二个网站。即使我将凭据放入 javascript 文件中也没有安全问题,因为整个系统都在 Intranet 中运行。那么如何在第二个网站上验证客户端?

我找到了这个帖子 How can I pass windows authentication to webservice using jQuery?

但它不起作用。当我查看第二个 url 的请求标头时,它不包含授权标签。

【问题讨论】:

  • 请发布您的代码。至少是进行 ajax 调用的部分,因为那是无法添加标头的地方。
  • 如果 JS 可以获取用户的凭据并在另一个“域”上冒充用户,那不是一个非常严重的安全漏洞吗?
  • 如果不使用某种 SSO(单点登录解决方案),您将无法满足您的要求,而这需要您同时控制这两个网站。您显示的 jQuery 链接仅适用于硬编码 HTTP Basic 身份验证。 NTLM 要复杂得多。此外,jQuery 示例只能通过 AJAX 请求工作。您不能强制浏览器在正常请求中发送 Authentication 标头。
  • 您不能使用 Windows 集成身份验证代替基本身份验证吗?
  • 试试这个stackoverflow.com/questions/33257969/… 有一个解决方案,它甚至不需要任何特殊配置,除了编写 nodejs 脚本和包含 lib。它很简单。

标签: javascript windows-authentication basic-authentication single-sign-on client-side-scripting


【解决方案1】:

如果是基本身份验证,并且您不介意公开凭据,为什么不直接在 URL 中插入用户名和密码?例如:

http://username:password@www.domain.com

但是,如果您可以控制 Web 服务器,则确实应该禁用 Intranet 连接的身份验证。

【讨论】:

  • 请注意,此技巧将不再适用于 Internet Explorer,因为 Microsoft 前段时间出于安全原因更改了默认行为:support.microsoft.com/kb/834489
  • 根据我的测试,如果您的密码具有 @ / & 之类的值,这将不起作用。
【解决方案2】:

如果它是基于 Windows 的 Intranet,我不会使用 Javascript,而是使用默认的 NTLM-Authentication,如 this thread 中所述。这样,您可以使用网络用户的正常用户名和密码为任意数量的站点提供单点登录。引用我从另一个线程的回答:

实际上可以使用 NTLM 身份验证。您需要AuthenNTLM-plugin,它将使用 Internet Explorer 对用户进行身份验证。一个示例语法是

<Location />
    PerlAuthenHandler Apache::AuthenNTLM 
    AuthType ntlm,basic
    AuthName test
    require valid-user

    #                    domain             pdc                bdc
    PerlAddVar ntdomain "name_domain1   name_of_pdc1"
    PerlAddVar ntdomain "other_domain   pdc_for_domain    bdc_for_domain"

    PerlSetVar defaultdomain wingr1
    PerlSetVar ntlmdebug 1
</Location>
## taken from the documentation

请参阅module documentation 了解更多选项和设置的具体说明 - 以上内容应该让您朝着正确的方向开始。

在客户端,Internet Explorer 和 Firefox 应该能够在一些配置后自动登录(Firefox 需要一点 special care - 这可以通过在部署期间设置配置变量来实现)。

【讨论】:

  • +1:知道这很有趣。这在 IIS 上是否有效?
  • @Willium_Niu:是的,你可以,根据this article。我没有任何关于 IIS 的经验可以分享,但看起来比 apache 的更简单(应该是,因为 NTLM 来自来自 Microsoft ;))。
【解决方案3】:

如果这是 Windows 身份验证,则响应不会提示客户端输入凭据,浏览器将尝试自己传递凭据。它不像 HTTP 那样工作——你实际上需要configure the browser itself 让它根据 Windows 凭据发送授权。

似乎根本没有简单的 JS 解决方案。

【讨论】:

    猜你喜欢
    • 2010-10-05
    • 2013-10-30
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2017-04-17
    • 2011-01-16
    相关资源
    最近更新 更多