首页 文章

是否可以在XMLHTTPRequest中使用Digest-Authentication?

提问于
浏览
7

我有一个简单的问题:是否可以在XMLHTTPRequest中使用Digest-Authentication?

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

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

编辑:

谢谢你的回答 . 在收到nonce后,修改标头以匹配摘要认证方案似乎是一种解决方案 .

但我真正想要的是我可以改变我当前的调用:xmlhttp.open(“GET”,url,false,用户名,密码);某事像那个xmlhttp.open(“GET”,url,false,用户名,密码,“DIGEST”);

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

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

5 回答

  • 3

    你可以做到没问题 . 只需按照你想要的规格部分;)
    http://tools.ietf.org/html/rfc2617
    并且是您开始编写身份验证库时所缺少的
    http://pajhome.org.uk/crypt/md5/
    在客户端 .

    预交换用户名和密码
    嘿,我想验证---->服务器
    好的,这是一个nonce / salt ---->客户端
    这是我的用户名密码时间戳和盐----->服务器的md5哈希值
    我只是以你做的方式加密你的密码和用户名,他们是相同的----->客户端
    这些是它的基础 .

    我遗漏了你需要在hashsum中包含所请求资源的URI!
    当然,您对服务器的每个请求执行此操作,因为某个拦截哈希的人只能查看您请求的内容,并且无法请求其他资源 . 此方法不保护数据只是访问权限它 .

  • 0

    看看这篇文章:http://marcin-michalski.pl/2012/11/01/javascript-digest-authentication-restful-webservice-spring-security-javascript-ajax/ . 它解释了如何在服务器端使用SpringSecurity进行摘要式身份验证的JavaScript客户端 . 代码在github中可用:https://github.com/Arrowgroup/JSDigestAuth

  • 8

    我为此编写了一个完整的工作流程,一旦你使用MD5的外部库(我使用Crypto-js)就不难了 .

    您可能遇到的最大问题是,在第一台服务器401上,任何最常用的浏览器都会打开一个用于获取凭据的对话框 . 据我所知,没有简单的方法来规避这个:How can I supress the browser's authentication dialog?

    为了解决这个问题,我修改了我从C#codeplex项目编码的网络服务器 . 在第一个请求时,客户端传递一个“警告” Headers ,说“不要提高401” . 服务器创建挑战并使用自定义的非401 HttpException将其发回(我暂时使用406,这在HTTP中是“不可接受的”) . 客户端创建哈希并将其发回 .

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

  • 0

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

  • 6

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

    如果指定用户名和密码来打开方法并且不要弄乱Authorization标头,XMLHttpRequest.send()将首先尝试发送请求而不进行身份验证,使用WWW-Authenticate标头接收401响应,并重试请求,提供名称和密码 . 到网站要求的授权方法 .

    (虽然在这个两阶段过程中可能会有一些额外的事件处理程序) .

相关问题