【问题标题】:Internet Explorer authentication of a REST with domain\username使用域\用户名对 REST 进行 Internet Explorer 身份验证
【发布时间】:2013-05-03 21:37:19
【问题描述】:

我有一个带有 webtrends 提取 API 的工作 javascript/jQuery REST 应用程序,但 IE 除外。

我正在通过 SSL 发送身份验证 - https://[domainname]\[username]:[password]@ws.webtrends.com/v3/Reporting/profiles/10609/Keymetrics/?start_period=current_day-1&end_period=current_day&period_type =agg&format=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]') 

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

【问题讨论】:

  • 你能展示你用 PHP 和 curl 尝试这个的代码吗?
  • 更新代码以反映请求的 curL 代码

标签: javascript internet-explorer rest webtrends


【解决方案1】:

更新

鉴于您对在 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 版本不支持在 HTTP 和具有安全套接字层 (SSL) 或 HTTPS URL 的 HTTP 中处理用户名和密码。 Internet Explorer 或 Windows Explorer 不支持以下 URL 语法: http(s)://username:password@server/resource.ext

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

【讨论】:

  • 感谢您的输入 Cory,我会感谢您的回答,但我在同一个 kb 上找到了这个 - support.microsoft.com/kb/832414 - 这是他们的解决方法
  • @user881083:感谢您的跟进。我做了更多研究,并根据您的反馈提供了更新的答案。
  • 是的,如果我不必为用户名输入我的域\用户名,这将起作用,因为 IE 正在将反斜杠更改为正斜杠。我试过 %5C 并转义反斜杠,但似乎没有任何效果。再次感谢您的反馈
猜你喜欢
  • 2014-01-04
  • 2012-08-22
  • 2012-08-17
  • 1970-01-01
  • 2012-09-29
  • 2015-10-25
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多