Аутентификация служб данных 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 в хранилище своим собственным кодом БД для хранения данных.

Другие вопросы по тегам