2012-04-11 67 views
5

我在这里看到了下面的问题,在没有运气的情况下,我试图做什么。用jquery和ajax发送授权头文件

Ajax Authorization Request headers fails again and again

jQuery Ajax Unauthorized 401 Error

Sending credentials with cross-domain posts?

这里是我的代码,我目前有:

$(document).ready(function() { 
     $.ajax({ 
      url: 'http://sample.domain.com/script.php?name1=value1&jsonp=?', 
      type: 'GET', 
      dataType: 'json', 
      contentType: "application/json", 
      beforeSend: function(xhr) { 
       xhr.setRequestHeader("Authentication", "Basic ZnJvbWFwcGx********uOnRoM24zcmQ1UmgzcjM=") //Some characters have been replaced for security but this is a true BASE64 of "username:password" 
      }, 
      success: function(data){ 
       alert(data); 
      } 
     }); 
    }); 


</script> 

子站点我是通过htpasswd文件进行密码保护。使用base64编码中使用的用户名/密码组合,该网站的登录工作正常。

我在一个不同的域名上运行这个脚本,而不是那个url所在的域名,这就是为什么我有jsonp =?在url

响应IM从浏览器控制台得到的是: GET http://sample.domain.com/script.php?name1=value1&jsonp=jsonp1334177732136 401 (Authorization Required)

+0

你为什么要使用基本身份验证吗?你的JS会将base64的密码暴露给全世界,所以它不会提供任何安全性。或者我误解了你的情况? – jimw 2012-04-11 21:03:50

+0

说实话,每个方法都是通过HTTP不安全的。这就是HTTPS存在的原因。 – freakish 2012-04-11 21:08:32

+0

这里的安全性不是问题。这只是我所拥有的一个样本。我已经把这个降到了基本的水平,尝试着去做一些工作。在我完成基本工作之后,我会保证安全。 – bretterer 2012-04-11 21:28:11

回答

4

JSONP使用脚本标签代理。它不支持自定义标题。你在控制端点吗?如果是这样,请考虑启用CORS,或者在GET字符串中传递身份验证密钥。

当使用JSONP JQuery的转换您的网址 “Ajax” 的要求:

<script src="[endpoint]"></script> 

它,然后写了一个随机函数

var json9409d0sf0d9s0df90 = function() { 
    //some callback logic here. 
} 

,并附加回调= json9409d0sf0d9s0df90

您的服务器呢?说

echo $_GET['callback] . "(" . $json . ")"; 

并发送回为如此

json9409d0sf0d9s0df90({some: data}); 

是由浏览器exexcuted和jQuery的神奇处理程序,使它像一个正常的Ajax回调响应处理的响应。

AFAIK,<script src=""></script>资产负载不会采用任何标准浏览器的自定义标题。

5

标题名称是Authorization,并且要发送 “Authentication

例如

授权:基本QWxhZGRpbjpvcGVuIHNlc2FtBmU =