Существует несколько способов защиты служб WCF. Вероятно, самый простой способ, если ваши службы уже являются частью существующего общего приложения ASP.NET, - это включить режим совместимости ASP.NET для ваших служб. Если ваше приложение ASP.NET использует проверку подлинности для проверки пользователей (например, проверку подлинности с помощью форм), и вы включаете ее с помощью файла cookie сеанса, то режим совместимости ASP.NET выполняет большую часть этой работы за вас.
По умолчанию это отключено, но вы можете включить его, добавив в свой web.config:
<system.serviceModel>
...
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
...
</system.serviceModel>
Это включит режим совместимости для всех ваших сервисов в вашем приложении. Вы также можете включить это для отдельных сервисов, установив значение web.config, а также используя атрибут AspNetCompatibilityRequirements для класса обслуживания, а не для интерфейса):
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class FooService: IFooService {
}
Когда вы включите этот параметр, у вас будет доступ к HttpContext.Current (например, к странице ASP.NET), и он также обеспечит проверку подлинности пользователя перед доступом к файлу .svc (так же, как вы должны проходить проверку подлинности перед доступ к любому файлу .aspx). Если вы попытаетесь получить доступ к файлу .svc без проверки подлинности и используете проверку подлинности с помощью форм, вызывающий будет перенаправлен на страницу входа по умолчанию и после успешной проверки подлинности будет перенаправлен в файл .svc.
Это предложение делает несколько предположений:
- ваши сервисы находятся в приложении ASP.NET;
- вы используете какой-либо тип проверки подлинности ASP.NET (например, проверку подлинности с помощью форм) для проверки учетных данных пользователей и сохранения билета проверки в файле cookie;
Это предположение, хотя, возможно, и не самое безопасное или надежное, но, пожалуй, самое простое, чтобы по крайней мере запустить и обезопасить ваш сайт в разумных пределах.
Вот хорошая вступительная статья библиотеки MSDN о режиме совместимости с ASP.NET.
Если это сработает, возможно, следующий шаг - изучить что-то вроде аутентификации HMAC (которая включает в себя немного больше работы и согласование секретных ключей - но это определенно более безопасно, IMHO). Вот хороший пример его реализации - http://blogs.microsoft.co.il/blogs/itai/archive/2009/02/22/how-to-implement-hmac-authentication-on-a-restful-wcf-service.aspx
Надеюсь, это поможет. Удачи !!