2009-05-19 1 views
0

У меня есть простой веб-сервис, благодаря которому безопасность обрабатывается с помощью проверки подлинности на основе форм.Аутентификация на основе форм на основе WCF через веб-приложение - передача учетных данных

WCFTestService.ServiceClient myService = new 
      WCFTestService.ServiceClient(); 
myService.ClientCredentials.UserName.UserName = "user"; 
myService.ClientCredentials.UserName.Password = "secret"; 
lblResult.Text = myService.GetData(1231); 
myService.Close(); 

Я получаю доступ к этому через веб-приложение. Поэтому я хочу сделать это выше, но для обеспечения безопасности/производительности не нужно делать это снова. Я думал, что-то вроде ниже, но, как я использую FormsAuthentication это не будет работать ...

//Obtain the authenticated user's Identity and impersonate the original caller 
using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate()) 
{ 
    WCFTestService.ServiceClient myService2 = new WCFTestService.ServiceClient(); 
    lblResult.Text = "From Logged On Credentials"+myService2.GetData(1231); 
    myService2.Close(); 
} 

ответ

1

То, что вы пытаетесь сделать, это установить «безопасный сеанс» между клиентом и к вашим услугам. Это концепция, которая будет работать только с wsHttpBinding - поэтому, если вы не используете это конкретное связывание, это не сработает.

Чтобы установить безопасный сеанс, вам необходимо установить несколько конкретных свойств конфигурации в конфигурационных файлах клиента и сервера - вы обязательно найдете эти настройки, прочитав документы (ищите «installSecurityContext») или проверьте Michele Leroux Bustumante отлично WCF screencast on security fundamentals на MSDN.

Но на самом деле: я бы не рекомендовал использовать безопасную сессию всеми способами. В нормальных условиях предпочтительным вариантом является использование услуг для каждого вызова, а накладные расходы для повторной аутентификации с каждым вызовом службы действительно небрежны.

Marc