ASP.NET Войти через Custom WCF Rest Call - PullRequest
1 голос
/ 08 сентября 2010

Я пишу панель администратора в ASP.NET для существующего набора вызовов веб-служб. Моя цель - использовать некоторые из существующих средств входа в систему (блокировка страниц, если вы не вошли в систему) и т. Д., Но используя мой механизм входа. Это работает путем нажатия на http-запрос с именем пользователя и паролем, если вам хорошо, вы получите идентификатор сессии, если нет, то получите 401. Вот WCF для этого:

        [WebInvoke(UriTemplate = "/Login/", Method = "POST")]
        public String Login(User user)
        {     
            // If we are good return sessiond id
            // Otherwise throw 401 etc

Итак, чтобы заставить это работать в ASP.Net, что нужно?

Я думаю, что это:

  • Реализовать пользователя, который переопределяет MembershipUser и имеет идентификатор сеанса.
  • Реализация поставщика членства, который переопределяет MembershipProvider и выполняет все вызовы WCF и т. Д.
  • В Web.Config настройте пользовательский поставщик членства.

Это правильно или я что-то упустил?

1 Ответ

1 голос
/ 11 февраля 2011

Вместо того, чтобы сделать это самостоятельно, вы можете взглянуть на WCF Аутентификация Сервисы.

Прежде чем идти по этому пути, имейте в виду, что службы аутентификации поддерживают вход и выход из системы, но это все. Обычные Membership методы, такие как CreateUser, недоступны. Если они вам нужны, вам нужно создать три проекта:

  1. Приложение-служба WCF с одной службой под названием WCFMembershipService, которая охватывает основные требования поставщика членства, т. Е. Вызывает Membership.Provider.Method(). Сконфигурируйте стандартные SQLMembershipProvider в web.config и
  2. Пользовательский поставщик членства, который будет использоваться в приложении ASP.NET, которое вызывает вашу службу WCF с шага 1, и
  3. Приложение ASP.NET с настроенным провайдером членства

Вы обнаружите, что поставщики Membership и Role чрезвычайно просты, но поставщик Profile более сложен, потому что вы не можете сериализовать свойства по умолчанию, которые требуются поставщику, такие как SettingsPropertyValueCollection.

В этом случае вам необходимо сначала преобразовать SettingsPropertyValueCollection в сериализуемый тип, а затем восстановить его на другом конце. Вероятно, Dictionary<string, string>() будет достаточно.

...