使用jQuery可以进行摘要身份验证吗?

前端之家收集整理的这篇文章主要介绍了使用jQuery可以进行摘要身份验证吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_1@我试图发送一个需要HTTP Digest身份验证的请求。

在jQuery中是可能的摘要吗?

如果是这样,这是否接近正确的方法呢?它目前不工作。

<script type="text/javascript">
    $.ajax({
        url: url,type: 'GET',dataType: 'json',success: function() { alert('hello!'); },error: function() { alert('error')},beforeSend: setHeader

    });

    function setHeader(xhr){
        xhr.setRequestHeader("Authorization","Digest username:password");
        xhr.setRequestHeader("Accept","application/json");
    }
</script>

解决方法

不, Digest Access Authentication Scheme有点复杂,因为它实现了 challenge-response authentication mechanism,需要以下步骤:

>客户端发送对访问受保护资源的请求,但不发送可接受的授权报头字段
>服务器以“401未授权”状态码和WWW认证头字段(摘要询问)作出响应,
>客户端发送对相同资源的另一个请求,但是包含授权头字段以响应该挑战(摘要响应)
>如果授权不成功,请转到步骤2;否则服务器会正​​常继续。

这意味着至少有两个请求/响应对。

每个WWW-Authenticate response header field具有语法:

06000

因此,您需要解析digest-challenge以获取参数,以便能够使用以下语法生成Authorization request header field摘要响应:

06001

该部分还描述如何计算摘要响应参数。特别是,您可能需要一个MD5实现,因为这是此认证方案最常用的算法。

这里是一个简单的标记化,您可以从:

var ws = '(?:(?:\\r\\n)?[ \\t])+',token = '(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2E\\x30-\\x39\\x3F\\x41-\\x5A\\x5E-\\x7A\\x7C\\x7E]+)',quotedString = '"(?:[\\x00-\\x0B\\x0D-\\x21\\x23-\\x5B\\\\x5D-\\x7F]|'+ws+'|\\\\[\\x00-\\x7F])*"',tokenizer = RegExp(token+'(?:=(?:'+quotedString+'|'+token+'))?','g');
var tokens = xhr.getResponseHeader("WWW-Authentication").match(tokenizer);

这将打开一个WWW-Authenticate头字段,如:

WWW-Authenticate: Digest
        realm="testrealm@host.com",qop="auth,auth-int",nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",opaque="5ccc069c403ebaf9f0171e9517f40e41"

进入:

['Digest','realm="testrealm@host.com"','qop="auth,auth-int"','nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093"','opaque="5ccc069c403ebaf9f0171e9517f40e41"']

然后,您需要解析参数(检查存在和有效性)并提取值。请注意,引用字符串值可以折叠,因此您需要展开它们(另请参阅在RFC中使用unquote函数unq):

function unq(quotedString) {
    return quotedString.substr(1,quotedString.length-2).replace(/(?:(?:\r\n)?[ \t])+/g," ");
}

有了这个,你应该能够自己实现。

猜你在找的jQuery相关文章