是否可以使用摘要
我有一个简单的问题:是否可以使用Digest-Authentication和XMLHTTPRequest?
如果答案是否定的,技术原因是什么? 或者如果可能的话 - 我该怎么做?
非常感谢...到目前为止google没有好的答案: - /
编辑:
感谢您的答案。 在接收到随机数后,修改标题以匹配摘要认证方案似乎是一种解决方案。
但我真正想要的是我可以改变我目前的调用:xmlhttp.open(“GET”,url,false,username,password); 某事 就像xmlhttp.open(“GET”,url,false,username,password,“DIGEST”);
这也是我最初的问题的一部分:为什么开放式方法不提供提出摘要请求的选项?
也许有一个js-lib可以推荐让我这么做 - 正如你想象的那样,我并不是真的想要将一个xmlhttp.open改为多个请求,并首先得到一个随机数。
你可以做到这一点没有问题。 只需按照您感觉的规格部分进行操作;)
http://tools.ietf.org/html/rfc2617
并且是你开始编写认证库所缺少的全部内容
http://pajhome.org.uk/crypt/md5/
在客户端。
预交换用户名和密码
嘿,我想验证---->服务器
好的,这里是一个nonce / salt ---->客户端
这里是我的用户名密码时间戳和盐----->服务器的md5哈希总和
我只是按照你的方式和你的密码和用户名一样,他们是相同的----->客户端
这些是它的基础。
我遗漏了你需要在hashsum中包含请求资源的URI!
当然,你可以用你为服务器提供的每一个资源请求来做到这一点,这样,拦截哈希的一些人只能查看你请求的内容,而不能请求其他资源。这种方法不保证数据的安全性到它。
看看这篇文章:http://marcin-michalski.pl/2012/11/01/javascript-digest-authentication-restful-webservice-spring-security-javascript-ajax/。 它解释了如何在服务器端使用SpringSecurity为摘要式身份验证执行JavaScript客户端。 代码在github中可用:https://github.com/Arrowgroup/JSDigestAuth
我为此编写了一个完整的工作流程,一旦您为MD5使用外部库(我使用Crypto-js),这并不困难。
您可能遇到的最大问题是在第一台服务器上401回复任何最常用的浏览器将打开一个对话框以获取您的凭据。 据我所见,并不容易规避这个问题:我如何禁止浏览器的验证对话框?
为了解决这个问题,我修改了我从C#codeplex项目编写的web服务器。 在第一次请求时,客户端传递一个“警告”标题,标题为“不要抬起401”。 服务器创建挑战并用自定义的非401HttpException(我现在使用406,这在HTTP中“不可接受”)发回。 客户端创建哈希并将其发回。
如果有人感兴趣,我可以发布一些代码片段,这是一个老问题。
链接地址: http://www.djcxy.com/p/503.html