Jquery+;wcf。基本身份验证问题
我的服务使用IIS中设置的基本身份验证进行保护,我正在尝试使用Jquery从服务中获取数据 已启用跨域调用 我有下一个请求头Jquery+;wcf。基本身份验证问题,jquery,ajax,wcf,authentication,http-headers,Jquery,Ajax,Wcf,Authentication,Http Headers,我的服务使用IIS中设置的基本身份验证进行保护,我正在尝试使用Jquery从服务中获取数据 已启用跨域调用 我有下一个请求头 Host http:\\service.com User-Agent Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language e
Host http:\\service.com
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-gb,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection keep-alive
Origin null
Access-Control-Request-Me... GET
Access-Control-Request-He... authorization
Pragma no-cache
Cache-Control no-cache
回应
Content-Type text/html
Server Microsoft-IIS/7.5
WWW-Authenticate Basic realm="172.27.131.5"
X-Powered-By ASP.NET
Access-Control-Allow-Orig... *
Access-Control-Allow-Head... *
Date Fri, 12 Aug 2011 08:07:29 GMT
Content-Length 1293
代码
我也试着设置
beforeSend : function(xhr) {
xhr.setRequestHeader("Authorization", "Basic " + Base64.encode(username + ':' + password));
},
但我还有一个错误:
访问控制允许标头不允许请求标头字段授权
我做错了什么?您需要在ajax调用中启用跨域
$.ajax({
headers : {
"Authorization" : "Basic TVNF3TQtU1BGMjAx6C12bVxzbW4ydHBvaW50OlF3Z5J0eSEyM6Q1"
},
type: "GET",
url: url,
crossDomain:true, <--
xhrFields: {
withCredentials: true
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
alert('ok!');
formatData(format_type,data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' / ' + errorThrown);
}
});
$.ajax({
标题:{
“授权”:“基本TVNF3TQTU1BGMJAX6C12BxZBW4YDHBVAW50OLF3Z5J0ESeyM6Q1”
},
键入:“获取”,
url:url,
crossDomain:true,尝试将以下代码添加到WCF项目中的global.asax(仅在iis中托管时有效):
Jquery向WCF服务发出一个选项调用,以检查该调用是否被允许。您必须匹配确切的头。您还可以在此处下载一个示例:
解决Access Control Allow Origin错误,将数据类型参数修改为数据类型:'jsonp'
并添加跨域:true
尝试不带头的ajax调用
,那么服务将如何进行身份验证?
$.ajax({
headers : {
"Authorization" : "Basic TVNF3TQtU1BGMjAx6C12bVxzbW4ydHBvaW50OlF3Z5J0eSEyM6Q1"
},
type: "GET",
url: url,
crossDomain:true, <--
xhrFields: {
withCredentials: true
},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
alert('ok!');
formatData(format_type,data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + ' / ' + errorThrown);
}
});
protected void Application_BeginRequest(object sender, EventArgs e)
{
EnableCrossDomainAjaxCall();
}
private void EnableCrossDomainAjaxCall()
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept");
HttpContext.Current.Response.End();
}
}
$.ajax({
url: 'https://www.tejastank.com/moderator/v1/series?key='+key,
data: myData,
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
success: function() { alert("Success"); },
error: function() { alert('Failed!'); },
beforeSend: setHeader
});