2012-05-07 1 views
2

Одним из препятствий той же политики происхождения является то, что он не поддерживает разные порты или поддомены. В результате, если вы размещаете свои службы на субдомену, таком как services.site.com, вы не можете вызывать услугу с сайта www.site.com без использования JSONP.WCF: происхождение белых списков с использованием JSONP

Есть ли способ настроить вашу службу WCF только для приема запроса от определенного источника?

Пример:

$(document).ready(function() { 
    $("#Button").click(function() { 
     $.getJSON("http://services.site.com/service.svc/myService?callback=?", function (data) { 
      var jObj = $.parseJSON(data); 
      $("#Result").html(jObj.MyValue); 
     }); 
    }); 
}); 

Если это был вызван из www.site.com я хочу работать. Но если другой сайт, например, www.example.com, назвал его, я бы хотел, чтобы служба WCF блокировала его.

Я попытался настройки файла web.config иметь:

<identity> 
    <dns value="www.example.com"/> 
</identity> 

Но когда я пытался дозвониться из www.site.com он все еще работал нормально. Скорее всего, это потому, что я установил crossDomainScriptAccessEnabled в true, чтобы JSONP вернул правильное значение обратного вызова. Только работала с WCF уже несколько дней.

Заранее спасибо.

ответ

0

Идентификация используется для идентификации услуги клиенту, чтобы не было предотвращено предоставление звонка в службу.

Если это бесплатный сервис, аутентификация и авторизация клиента не нужны, независимо от того, откуда оно взялось.

С другой стороны, если вы хотите защитить услугу, вам необходимо выполнить аутентификацию/авторизацию клиента на службу независимо от происхождения вызова. Есть много ресурсов по этой теме:

MSDN Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4

SO Securing WCF Services

MSDN WCF Security Resources

Securing WCF Services: Using ASP.NET Membership & Role Providers

Вы могли бы попытаться грубой силы, чтобы получить IP клиента (который будет работать наиболее из время), получая удаленную конечную точку, подобную этой, в вызове метода или перехватывая ее где в подавляющем WCF extensibility цепи:

var messageProperty = OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 

После этого вы можете сделать обратный поиск DNS, но это не всегда может работать слишком (прокси-сервера, NATs и т.д.)

Другой быстрый точки, используя GET на JSON звонков может привести к JSON Hijacking

 Смежные вопросы

  • Нет связанных вопросов^_^