Я думаю, что ответ на ваш вопрос зависит от цели вашего сервиса и типа приложений, которые будут его использовать.
Если у вас есть приложение ASP .Net, и вы хотите выставитьчасть его функциональности как службы RESTfull, которую вы могли бы использовать на стороне клиента, используя AJAX, тогда WCF может оказаться не лучшим вариантом.В этом конкретном случае у вас уже есть пользователь аутентификации внутри веб-приложения, и вы хотите, чтобы эта аутентификация распространялась во время вызовов AJAX.Реализовать это на самом деле довольно просто.
Аутентификация ASP .Net Forms основана на аутентификационных cookie-файлах, которые генерируются и передаются в браузер после успешного входа в систему.Каждый вызов, сделанный из браузера на любой URL в том же домене, что и ваше приложение, также будет содержать файл cookie для аутентификации.В ASP .Net MVC вы можете просто реализовать свои методы обслуживания как действия контроллера, которые требуют авторизации, и все произойдет за вас.
В классическом ASP .Net вы можете использовать PageMethods для реализации методов обслуживания и сновакуки будут отправлены и проверены для вас за кадром (примеры PageMethods здесь и здесь ).
С другой стороны, если ваша служба будетпотребляемый вне браузера (например, из настольных или мобильных приложений), WCF действительно может быть подходящим инструментом для реализации сервиса.Однако проверка подлинности на основе форм ASP .Net - не лучший выбор для обеспечения безопасности.Основное назначение служб REST - это простота, позволяющая легко внедрять клиенты на любой платформе, а механизм проверки подлинности форм ASP .Net на основе файлов cookie не самый простой.
Один протокол, специально созданный для проверки подлинности пользователя.в контексте веб-сервисов, это OAuth.Его вторая версия все еще находится в стадии разработки (см. Спецификации здесь ), но, скорее всего, вы захотите использовать эту версию, поскольку она намного проще, чем OAuth 1.0.Facebook уже внедрил свою API-аутентификацию через OAuth 2.0 (подробности здесь ), и вы можете проверить их реализацию на предмет вдохновения.
Помимо аутентификации пользователя, OAuth также гарантирует использование приложения (клиента службы)аутентификации, а также гарантирует, что пользователь никогда не введет свои учетные данные непосредственно внутри клиентского приложения.Если это слишком много для того, что вам на самом деле нужно, вы можете создать собственную реализацию, основанную на OAuth 2.0.
Прежде всего вам нужно будет представить свой сервис через HTTPS, чтобы вся связь между сервисоми клиент зашифрован.Во-вторых, вам необходимо создать метод входа в службу, например, следующий:
string Login(string user, string password);
При успешном входе в систему указанный выше метод вернет маркер аутентификации.Токен аутентификации будет затем использован и проверен на всех других методах.Например:
Employee[] GetAllEmployees(string authToken)
{
// verify token here
// return data if user authenticated by token
}
В приведенной выше архитектуре authToken выполняет ту же роль, что и cookie-файл аутентификации в ASP .Net-аутентификации форм, но передается как простой параметр.Вы будете нести ответственность за реализацию алгоритма генерации токенов (они должны быть достаточно длинными и уникальными, с алгоритмом вроде здесь ), а также за их хранение и проверку.