Передача файлов cookie FormsAuthentication в службу WCF

У меня есть веб-сайт, который рассказывает о удаленном веб-сервисе WCF. Оба используют один и тот же пользовательский поставщик FormsAuthentication. Я хотел бы выполнить аутентификацию с помощью службы WCF, олицетворяя пользователя, который в настоящее время зарегистрирован на сайте. Я уже сделал это вручную, используя учетные данные клиента UserName, но мне нужно знать пароль пользователя. Итак, то, что работает так fart, это: аутентифицированный пользователь делает запрос, я создаю Service Client и устанавливаю его учетные данные:

serviceClient.ClientCredentials.UserName.UserName = username; serviceClient.ClientCredentials.UserName.Password = password; 

Но я действительно хочу передать cookie FormsAuthentication напрямую, потому что я не хочу хранить пароль пользователя.

Есть идеи?

    Похоже, вы ищете службу проверки подлинности Windows Communication Foundation .

    РЕДАКТИРОВАТЬ:

    После более тщательного повторного чтения вопроса (и после комментария Ариэля) я хотел бы отбросить вышеупомянутое предложение. Служба проверки подлинности WCF не добавит многого к этому сценарию.

    Я не делал этого между WCF и ASP.NET, однако я настроил приложения ASP.NET для совместного использования форм, прошедших проверку подлинности, возможно, я могу каким-то образом помочь.

    Чтобы гарантировать, что оба приложения могут шифровать / дешифровать файл cookie проверки подлинности форм таким же образом, вы должны настроить элемент для обоих приложений (в web.config или machine.config в зависимости от того, хотите ли вы сделать это на машине или приложении уровень). Вы должны посмотреть на атрибуты validationKey , decryption и decryptionKey .

    Убедитесь, что ваши элементы в обоих файлах web.config настроены аналогичным образом. В частности, атрибуты name , path и domain .

    Вероятно, это относится только к файлам cookie, переданным в / из веб-браузера (но может быть полезно в этом случае). Чтобы разрешить передачу файлов cookie между веб-сайтами http://www.foo.com и bar.foo.com, вы должны настроить forms элемент, как показано ниже, чтобы cookies устанавливались на одном сайте и успешно передавались другому:

      

    Передача файла cookie в службу WCF, вероятно, будет сложным битом. Я не очень опытен с WCF, поэтому я адаптировал код с kennyw.com :

     HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty(); httpRequestProperty.Headers.Add(HttpRequestHeader.Cookie, ""); using (OperationContextScope scope = new OperationContextScope(serviceClient.InnerChannel)) { OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty; serviceClient.MethodName(); } 

    Если вы размещаете WCF в IIS (а не самостоятельно), вы можете передать запрос WCF через конвейер обработки ASP.NET, установив

        

    Если вы являетесь самостоятельным хостингом, вы можете изучить заголовки запросов, используя свойства входящего сообщения в OperationContext.Current.IncomingMessageProperties и получить значение cookie для проверки подлинности форм и расшифровать его с помощью FormsAuthentication.Decrypt(string) .

    Я понятия не имею, будет ли это работать, но хотелось бы услышать, если это произойдет!

    Это достаточно просто сделать, если вы размещаете службу WCF на аутентифицированном сайте IIS.

    Включите совместимость, добавив следующее в свой раздел system.ServiceModel в вашем web.config

        

    Затем украсьте каждую услугу, которую вы хотите принять в cookie, со следующими

     [AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

    Теперь объект HttpContext.Current.User.Identity будет правильно заполнен, и вы также можете использовать требования PrinciplePermission для ограничения доступа по ролям или определенным пользователям.

    Interesting Posts

    Массивы, распадающиеся на указатели

    Неверный размер шрифта Powershell на Windows 8.1

    Разделить тестовые ресурсы между maven-проектами

    Как настроить Android Studio на работу полностью в автономном режиме?

    Языки динамического типа по сравнению с языками статического типа

    Как изменить текстовое представление, отображаемое для типа в Swift?

    Может кто-нибудь объяснить структуру Пида в Эрланге?

    TypeError: данные POST должны быть байтами или итерабельными байтами. Это не может быть str

    Общее правило из makefile в CMake

    Не удается установить Kali Linux с USB, не удается найти привод CD-ROM

    Значки EXIF ​​для GIF

    преобразование строки базы 64 в изображение и сохранение ее

    Обновление Java «Не удалось загрузить необходимые установочные файлы».

    Как транслировать ТВ / Фильмы / Музыка через Интернет на различные устройства с домашнего сервера?

    Пользовательский стол WooCommerce

    Давайте будем гением компьютера.