gpt4 book ai didi

JavaScript/Ajax NTLM 身份验证

转载 作者:行者123 更新时间:2023-12-03 21:46:29 30 4
gpt4 key购买 nike

我正在开发一个 HTML5 移动应用程序,它与 WebServices 进行通信。 Web服务使用NTLM身份验证协议(protocol)。我在通过 JavaScript 处理握手时遇到困难。 NTLM 发送 401 Unauthorized 作为对我的 POST 的响应,但我没有找到任何方式来响应。

是否可以使用 JavaScript 进行 NTLM 身份验证?我应该建立一个代理网络服务吗?中间的基本身份验证?

我的 jQuery 调用类似于...

$.ajax({
type: "POST",
url: URL,
contentType: "text/xml",
dataType: "xml",
data: soapRequest,
username: 'username',
password: 'password',
xhrFields: {
withCredentials: true
},
success: processSuccess,
error: processError
});

最佳答案

您不必响应 NTLM(集成 Windows 身份验证)质询,如果配置正确,您的浏览器应该会为您做这件事。还可能出现许多其他并发症。

第 1 步 - 浏览器

检查浏览器是否可以使用 NTLM Web 应用程序或通过首先直接访问您正在开发的软件来访问和发送您的凭据。

第 2 步 - JavaScript withCredentials 属性

当我未能将“withCredentials”属性设置为“true”时,收到的 401 Unauthorized 错误和描述的症状完全相同。我不熟悉 jQuery,但请确保您设置该属性的尝试成功。

这个例子对我有用:

var xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://localhost:44377/SomeService", true);
xhttp.withCredentials = true;
xhttp.send();
xhttp.onreadystatechange = function(){
if (xhttp.readyState === XMLHttpRequest.DONE) {
if (xhttp.status === 200)
doSomething(xhttp.responseText);
else
console.log('There was a problem with the request.');
}
};

第 3 步 - 服务器端启用 CORS(可选)

我怀疑人们最终提出这个问题的一个主要原因是他们正在自己的工作站上开发一个组件,而另一个组件则托管在其他地方。这会导致Cross-Origin Resource Sharing (CORS)问题。解决办法有两种:

  1. 在浏览器中禁用 CORS - 当您的工作最终将部署在与代码访问的资源相同的源上时,这有利于开发。
  2. 在您的服务器上启用 CORS - 在更广泛的互联网上有大量的阅读内容,但这基本上涉及发送启用 CORS 的 header 。

简而言之,要使用凭据启用 CORS,您必须:

  • 发送与所提供页面的来源匹配的“Access-Control-Allow-Origin” header ...这不能是“*”
  • 发送值为“true”的“Access-Control-Allow-Credentials”

这是我的 global.asax 文件中的工作 .NET 代码示例。我认为很容易看到正在发生的事情并在需要时翻译成其他语言。

void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.HttpMethod == "OPTIONS")
{
Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
Response.AddHeader("Access-Control-Max-Age", "1728000");
Response.End();
}
else
{
Response.AddHeader("Access-Control-Allow-Credentials", "true");

if (Request.Headers["Origin"] != null)
Response.AddHeader("Access-Control-Allow-Origin" , Request.Headers["Origin"]);
else
Response.AddHeader("Access-Control-Allow-Origin" , "*"); // Last ditch attempt!
}
}

关于JavaScript/Ajax NTLM 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18527749/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com