Аутентификация служб данных WCF
РЕДАКТИРОВАТЬ: я решил пойти на службы данных WCF, а не MVC3
Теперь, когда я решил использовать WCF Data Services, мне нужен способ аутентификации и авторизации пользователей.
Посмотрел на настройку БД SQLMembership, но я пытаюсь на самом деле аутентифицировать пользователей. Моими клиентами не будут приложения.NET - скорее всего, это будет приложение для iPhone/Android, которое вызовет службу данных RESTFul WCF для получения данных...
2 ответа
Аутентификация
Службы данных WCF допускают различные варианты проверки подлинности, как описано в MSDN: Защита служб данных WCF. Из доступных методов аутентификация Windows является наиболее безопасной с использованием механизма NTLM или Kerberos. Из-за ограничений кроссплатформенной доступности наиболее подходящим и безопасным методом аутентификации, который можно использовать, является NTLM, поскольку он доступен практически на всех текущих платформах: Android (с версии 4.0 "Ice Cream Sandwich"), iOS, Linux, UNIX, Windows.
Настройка проверки подлинности Windows для службы OData, размещенной на IIS, означает отключение анонимного доступа и включение встроенной проверки подлинности Windows. Более подробное руководство можно найти в разделе Аутентификация Odata и Windows.
Для более детального контроля пользователей, которым разрешен доступ к службе, доступ может быть предоставлен или запрещен как для пользовательских ролей / групп, так и для конкретных пользователей, непосредственно из файла конфигурации (например, web.config). Синтаксис для разрешения доступа для конкретного пользователя описан ниже. Для максимальной безопасности рекомендуется запретить доступ всем пользователям / группам, а затем явно разрешить доступ по мере необходимости. Правила между тегами авторизации берутся по порядку (то есть разрешение пользователю DOMAIN\ пользовательский доступ имеет приоритет над отказом для всех пользователей)
<authorization>
<allow users="DOMAIN\user"/>
<-- Deny access to every other authenticated or anonymous user
<deny users="*" />
<deny users="?" />
</authorization>
Если тег авторизации не определен явно в файле конфигурации, то IIS выполнит проверку подлинности и предоставит доступ всем распознаваемым подключенным пользователям (в Active Directory или на локальном компьютере).
Настройка аутентификации Windows в междоменной среде возможна, но требует либо:
- доверие должно быть установлено между доменами (чтобы IIS мог аутентифицировать внешних пользователей), или
- одна и та же комбинация имени пользователя и пароля должна присутствовать в обоих доменах или
- клиент во внешнем домене аутентифицируется с учетными данными, действительными для домена сервера.
Доступные варианты для таких ситуаций описаны более подробно в этом сообщении в блоге.
олицетворение
Чтобы иметь возможность войти в базу данных и получить нужные данные с использованием учетных данных учетной записи Windows, отправленных в службу данных WCF, службе необходимо выдать себя за пользователя. Это можно сделать либо в коде, либо в конфигурации
- В файле конфигурации (то есть web.config) следующие настройки
должны быть сделаны:
identity impersonate="true"
Если нежелательно, чтобы вся служба работала под учетными данными подключающегося пользователя, олицетворение может быть настроено программно, где это необходимо, следующим образом:
lUser = TryCast (HttpContext.Current.User.Identity, WindowsIdentity)
lUserContext = WindowsIdentity.Impersonate (lUser.Token)
Я бы предложил использовать ServiceStack.net с MVC 3. ServiceStack - это инфраструктура веб-сервисов, которая очень хорошо работает с MVC 3, включает в себя пакет NuGet для настройки всего и изначально работает с JSON. Лучшее в этом - не конфигурация (в отличие от WCF), а простой и мощный подход, основанный на коде. Это также очень быстро. Смотрите http://www.servicestack.net/ для загрузки и мой учебник для начала работы с ним. Из моего руководства вы можете заменить код Tridion в хранилище своим собственным кодом БД для хранения данных.