使用域\用户名对REST进行Internet Explorer身份验证

时间:2013-05-03 21:37:20

标签: javascript internet-explorer rest webtrends

我有一个使用webtrends的exctraction API的javascript / jQuery REST应用程序,IE除外。

我通过SSL发送身份验证 - https:// [域名] \ [用户名]:[密码] @ ws.webtrends.com / v3 / Reporting / profiles / 10609 / Keymetrics /?start_period = current_day-1& end_period = CURRENT_DAY&安培; period_type = AGG&安培;格式= JSON

当我查看开发者工具(F12)>在“网络”选项卡下,Internet Explorer将反斜杠(“\”)更改为正斜杠(“/”),这会导致浏览器查找具有域名值的网站。

所有其他浏览器都不会更改反斜杠。

    $.ajaxSetup({
        crossDomain: true,
        async: false,
        contentType: "application/jsonp",
        dataType: "jsonp",
        type: "POST",
        cache: false,
        beforeSend: function(xhr) {
          xhr.overrideMimeType("application/jsonp; charset=UTF-8");
        },
        headers: {
            "Authorization": mBaseSixtyFourVar
        },
        url: mXferObj.mUrl
    });

    $.ajax({ 
        success: function(mInfo){        
            mRecvObj = mInfo;
            alert(mRecvObj.data[0].measures.NewVisitors+"");
        },
        error: function (xmlHttpRequest, textStatus, errorThrown) {
            alert("xmlHttpRequest.readyState: "+xmlHttpRequest.readyState+", textStatus: "+textStatus+", errorThrown: "+errorThrown+", mXferObj.mUrl: "+mXferObj.mUrl);
        }
    });

我尝试了以下内容:

将其插入ajaxsetup

data: "{'domain':'domainname','username':'blabla','password':'blabla'}",

使用PHP,我尝试过使用curl,但除了bool(false)之外没有返回任何内容:

我尝试了file_get_contents(),但收到了开放流错误。

我有这个在FireFox,Opera,Safari,Chrome中工作 - 为什么IE总是坚持完美?

任何帮助将不胜感激,并提前感谢

根据要求,这是我尝试过的一个curL代码:

if (!function_exists('curl_init')){ 
    die('CURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
var_dump $output;

我尝试了以下选项:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt(CURLOPT_USERPWD, '[username]:[password]') 

我尝试了很多不同的东西,那是最后一次

1 个答案:

答案 0 :(得分:0)

<强>更新

鉴于您对XMLHTTPRequest中提供用户名和密码的评论,我做了一些研究,发现jQuery 支持此功能。您只需将usernamepassword参数添加到您的请求中即可:

$.ajaxSetup({
    crossDomain: true,
    async: false,
    contentType: "application/jsonp",
    dataType: "jsonp",
    type: "POST",
    cache: false,
    beforeSend: function(xhr) {
      xhr.overrideMimeType("application/jsonp; charset=UTF-8");
    },
    headers: {
        "Authorization": mBaseSixtyFourVar
    },
    url: mXferObj.mUrl,
    username: "yourUsername",
    password: "yourPassword"
});

原始答案

简而言之,Internet Explorer不支持此功能。它已在2004年发布的先前安全更新中删除:

http://support.microsoft.com/kb/834489

  

默认情况下,从安全更新832894发行版开始发布的Windows Internet Explorer版本不支持使用安全套接字层(SSL)或HTTPS URL处理HTTP和HTTP中的用户名和密码。 Internet Explorer或Windows资源管理器中不支持以下URL语法:   HTTP(S)://用户名:password@server/resource.ext

备选方案可能包括向您自己的服务器发出AJAX请求,然后在服务器端执行请求,以托管代码执行请求。例如,如果您选择的语言是C#,则可以使用HttpWebRequest并提供正确的NetworkCredentials信息来完成请求。

相关问题