Jquery + ФОС. Проблема с базовой аутентификацией - PullRequest
3 голосов
/ 12 августа 2011

Мой сервис защищен с помощью базовой аутентификации, установленной в 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 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

Код

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

Также я попытался установить

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

Но у меня есть следующая ошибка:

Поле заголовка запроса Авторизация не разрешена Access-Control-Allow-Headers

Что я делаю не так?

Ответы [ 3 ]

9 голосов
/ 31 октября 2011

Попробуйте добавить следующий код в global.asax в вашем проекте WCF (работает только при размещении в 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 отправляет вызов OPTIONS службе WCF, чтобы проверить, является ли этот вызовпозволил.Вы должны соответствовать точному заголовку.Вы также можете скачать пример здесь: http://sameproblemmorecode.blogspot.com/2011/10/creating-secure-restfull-wcf-service.html.

1 голос
/ 30 апреля 2012
$.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
});

Устраните ошибку Access-Control-Allow-Origin, изменив параметр dataType на dataType:'jsonp' и добавив crossDomain:true.

1 голос
/ 12 августа 2011

вам нужно включить кросс-домен в вашем вызове 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);
     }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...