Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以将摘要身份验证与XMLHTTPRequest一起使用?_Javascript_Http_Xmlhttprequest_Web - Fatal编程技术网

Javascript 是否可以将摘要身份验证与XMLHTTPRequest一起使用?

Javascript 是否可以将摘要身份验证与XMLHTTPRequest一起使用?,javascript,http,xmlhttprequest,web,Javascript,Http,Xmlhttprequest,Web,我有一个简单的问题:是否可以将摘要身份验证与XMLHTTPRequest一起使用 如果答案是否定的,技术原因是什么?或者,如果可能的话,我该怎么做 非常感谢……到目前为止,谷歌还没有好的答案:-/ 编辑: 谢谢你的回答。在收到nonce之后,修改报头以匹配摘要身份验证方案似乎是一个解决方案 但我真正想要的是,我可以更改当前的调用:xmlhttp.open(“GET”、url、false、用户名、密码); 类似于xmlhttp.open(“GET”、url、false、用户名、密码、“摘要”) 这

我有一个简单的问题:是否可以将摘要身份验证与XMLHTTPRequest一起使用

如果答案是否定的,技术原因是什么?或者,如果可能的话,我该怎么做

非常感谢……到目前为止,谷歌还没有好的答案:-/

编辑:

谢谢你的回答。在收到nonce之后,修改报头以匹配摘要身份验证方案似乎是一个解决方案

但我真正想要的是,我可以更改当前的调用:xmlhttp.open(“GET”、url、false、用户名、密码); 类似于xmlhttp.open(“GET”、url、false、用户名、密码、“摘要”)

这也是我最初问题的一部分:为什么open方法不提供进行摘要请求的选项


也许有人可以推荐js lib让我这样做——正如你想象的那样,我真的不想将一个简单的xmlhttp.open更改为多个请求,然后首先获得一个nonce。

你可以这样做,没问题。只需按照您喜欢的规格部分操作;)

这是开始在客户端编写身份验证库所缺少的全部内容

预交换用户名和密码
嘿,我想验证-->服务器
好的,这是一个nonce/salt-->client
这是我的用户名密码时间戳和salt----->服务器的md5哈希和
我只是用与您相同的方式设置了您的密码和用户名,它们都是相同的---->client
这些是它的基础

我遗漏了您需要在hashsum中包含请求资源的URI

当然,对于向服务器发出的每一个资源请求,您都会这样做,这样一来,截取哈希的某个人只能查看您请求的内容,而不能请求其他资源。这种方法不能确保仅访问数据的安全。

最好的方法是使用SSL。我认为不存在任何其他安全的解决方案(如果我错了,请纠正我)

看看这篇文章:。它解释了如何在服务器端使用SpringSecurity进行JavaScript客户端摘要身份验证。代码可以在github中找到:

我已经为此编写了一个完整的工作流程,一旦您使用MD5的外部库(我使用Crypto js),这一点都不困难

您可能遇到的最大问题是,在第一台服务器上,任何最常用的浏览器都会打开一个对话框来获取您的凭据。据我所知,要绕过这一点并不容易:

为了解决这个问题,我修改了我从一个C#codeplex项目编码的Web服务器。 在第一个请求中,客户机传递一个“警告”标题,上面写着“不要提交401”。 服务器创建质询并将其发送回一个自定义的非401 HttpException(目前我使用的是406,这在HTTP中是“不可接受的”)。 客户端创建散列并将其发送回


如果有人感兴趣,我可以发布一些代码片段,这是一个老问题。

只要您的浏览器支持,您真的不应该关心站点使用哪种身份验证方法

如果您指定用户名和密码来打开方法,并且没有弄乱授权头,XMLHttpRequest.send()将首先尝试在不进行身份验证的情况下发送请求,接收带有WWW Authenticate头的401响应,然后重试请求,根据站点请求的授权方法提供名称和密码


(尽管在这两个阶段的过程中可能会触发一些额外的事件处理程序)。

为了避免出现默认的浏览器身份验证对话框,您只需将WWW Authenticate设置为Digest/YourString(例如,您的领域)。这一切都在第一反应中,不是那么悲惨。。我的自定义代码直到昨天还运行得很好,现在我正在调试突然发生的一些奇怪的事情,仍然试图理解..

我不同意。任何人都可以向服务器请求一个nonce。您希望如何将其安全地传输到客户端?您不需要
t这只是为了使您更难从md5中找出密码,并使每次身份验证尝试都是唯一的。http://en.wikipedia.org/wiki/Cryptographic_nonce. 这样的话,在中间的某个人不能在另一时间对它进行哈希和重新认证。事实上,它们在Oauth中使用nonce。我知道你在想什么
s仍然完全不安全,但这种身份验证的目的只是保留你的用户名和密码。这是非常基本的。我想补充一点,这个摘要方法需要服务器明白密码。有关更安全的方法,请参阅RFC8146到目前为止您尝试了什么?如果您的服务器页面需要摘要身份验证(向未经身份验证的请求返回401),并且您在XHR open()调用中传递了用户名和密码,那么一切都应该正常工作。您完成了吗?我真的很喜欢一些代码。谢谢Digest比Basic+SSL更安全!查看RFC 2617,关于安全性的部分。如果没有SSL,MitM攻击者(例如恶意或受损的代理;比如在公共WiFi接入点)可以向HTML注入任意JavaScript(或简单的链接)。通过这种方式,攻击者的请求将源自用户的浏览器,因此服务器将没有任何机会辨别这些请求不是来自用户。攻击者甚至不需要知道密码。对于Safari,当它通过XHR接收401时,这似乎不是真的。你说的“这”是什么意思?“此”=“浏览器也会为XHR 401打开一个对话框”?如果是这种情况,就没有必要使用警告标题技巧。广泛兼容的解决方案仍然需要一个变通办法。这是最好的答案。指向某人的帖子,它已经完成了所有的工作,并提供了完整的源代码(有一个非常简单的测试方法)是的,除了链接现在已经死了,答案是无用的。