setrequestheader example con agregar jquery ajax wcf authentication http-headers

example - Jquery+wcf. Problema con la autenticación básica



jquery ajax get (3)

necesitas activar el dominio cruzado en tu llamada 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); } });

Mi servicio está protegido con la autenticación básica establecida en IIS y trato de obtener datos del servicio con Jquery.

Se habilitan las llamadas entre dominios.

Tengo los próximos encabezados de solicitud

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

Respuestas

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

Código

$.ajax({ headers : { "Authorization" : "Basic TVNF3TQtU1BGMjAx6C12bVxzbW4ydHBvaW50OlF3Z5J0eSEyM6Q1" }, type: "GET", url: url, 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); } });

también traté de establecer

beforeSend : function(xhr) { xhr.setRequestHeader("Authorization", "Basic " + Base64.encode(username + '':'' + password)); },

Pero tengo el siguiente error:

Campo de encabezado de solicitud La autorización no está permitida por Access-Control-Allow-Headers

que estoy haciendo mal?


Intente agregar el siguiente código a global.asax en su proyecto WCF (solo funciona cuando está alojado en iis):

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(); } }

Jquery emite una llamada OPCIONES al servicio WCF para verificar si la llamada está permitida. Tendrá que coincidir con el encabezado exacto. También puede descargar un ejemplo aquí: http://sameproblemmorecode.blogspot.com/2011/10/creating-secure-restfull-wcf-service.html .


$.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 });

Resuelva el error de Access-Control-Allow-Origin al modificar el parámetro dataType:''jsonp'' a dataType:''jsonp'' y agregando un crossDomain:true .