2013-04-16 5 views
0

У меня есть сервис, который я доступ из JQuery на странице, это выглядит следующим образом:Как ограничить доступ к службе WCF, реферированием?

[ServiceContract(Namespace = "")] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class FacadeService 
{ 
    ServiceHelper serviceHelper = new ServiceHelper(); 

    [OperationContract] 
    [WebGet(ResponseFormat=WebMessageFormat.Json)] 
    public String GetAllProducts() 
    { 
     Uri uri = new Uri("http://localhost:12345/api/Products"); 

     return serviceHelper.SubmitGetRequestToService(uri); 
    } 
} 

Это здорово, но теперь любой желающий может открыть браузер и нажмите эту услугу. Я хочу, чтобы только локальный сайт мог получить доступ к этой службе. Есть ли какой-либо встроенный способ сделать это, или я должен придумать какую-нибудь умную схему, чтобы не выпускать рифф-рейфф?

ответ

0

Если вы размещаете свой сервис на IIS, возможно, самым простым способом будет ограничение доступа к сервису с помощью инструментов IIS.

Если у вас есть это с помощью службы wcf, вы можете добавить свое поведение для ip-фильтрации, см., Например, this и this.

Но я все еще думаю, что это будет проще выполнить с помощью стандартных инструментов IIS.

+0

Я действительно первый человек, с которым можно столкнуться? Я предположил, что, поскольку WCF настроен таким образом специально для вызовов AJAX, он предложит какой-то механизм, чтобы убедиться, что абоненты, не входящие в AJAX, не могут просто подключиться к службе и начать сосать данные. Однако внутри службы WCF у вас нет «контекста» от вызывающих, поэтому я предположил, что будет некоторая настройка WCF. Я не могу быть единственным человеком в мире, который сможет справиться с этим первым, верно ?! :-) –

+0

Я обновил ответ - вы можете писать и использовать свое поведение, если вам нужно. – evgenyl

+0

Спасибо, снова. Наверное, я не ищу «способ», я ищу наилучшую практику и как это уже решено. –