Ответ 1
Похоже, вы ищете Служба проверки подлинности Windows Communication Foundation.
EDIT:
После более тщательного повторного чтения вопроса (и после комментария Ариэля) я хотел бы отбросить вышеупомянутое предложение. Служба проверки подлинности WCF не добавит большого значения в этот сценарий.
Я не делал этого между WCF и ASP.NET, однако я настроил приложения ASP.NET для совместного использования форм, прошедших проверку подлинности, возможно, я могу каким-то образом помочь.
Чтобы гарантировать, что оба приложения могут шифровать/дешифровать cookie файлы cookie форм таким же образом, вы должны настроить элемент <machineKey>
для обоих приложений (в файле web.config или machine.config в зависимости от того, хотите ли вы это сделать на уровне машины или приложения). Вы должны посмотреть атрибуты validation
, validationKey
, decryption
и decryptionKey
.
Убедитесь, что ваши элементы <forms>
в обоих файлах web.config настроены аналогично. В частности, атрибуты name
, path
и domain
.
Вероятно, это относится только к файлам cookie, переданным в/из веб-браузера (но может быть полезно в этом случае). Чтобы разрешить передачу файлов cookie между веб-сайтами www.foo.com и bar.foo.com, вы бы настройте элемент forms
следующим образом, чтобы файлы cookie устанавливались на одном сайте и успешно передавались другому:
<forms ... domain=".foo.com" ... />
Передача файла cookie в службу WCF, вероятно, будет сложным битом. Я не очень опытен с WCF, поэтому Я адаптировал код из kennyw.com:
HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers.Add(HttpRequestHeader.Cookie, "<Forms Authentication Cookie>");
using (OperationContextScope scope = new OperationContextScope(serviceClient.InnerChannel))
{
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
serviceClient.MethodName();
}
Если вы размещаете WCF в IIS (а не самостоятельно), вы можете передать запрос WCF через конвейер обработки ASP.NET, установив
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" ... />
</system.serviceModel>
Если вы являетесь самостоятельным хостингом, вы можете изучить заголовки запросов, используя свойства входящих сообщений в OperationContext.Current.IncomingMessageProperties
, и получить значение cookie для проверки подлинности форм и расшифровать его с помощью FormsAuthentication.Decrypt(string)
.
Я не знаю, будет ли это работать, но хотелось бы услышать, если это произойдет!