2009-05-19 5 views
0

Ich habe einen einfachen Webdienst, bei dem die Sicherheit über formularbasierte Authentifizierung gehandhabt wird.WCF formularbasierte Authentifizierung über Web App - Anmeldeinformationen übergeben

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

Ich greife auf diese über eine Web-App. Also ich möchte das obige einmal machen aber aus Sicherheitsgründen muss ich es nicht nochmal machen. Ich war das unter so etwas wie das zu denken, aber wie ich FormsAuthentication dies nicht funktionieren bin mit ...

//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(); 
} 

Antwort

1

Was Sie versuchen, eine „sichere Sitzung“ zwischen dem Client und Ihrem Dienst zu tun ist, zu etablieren. Dies ist ein Konzept, das nur mit dem wsHttpBinding funktioniert - wenn Sie also diese bestimmte Bindung nicht verwenden, wird es nicht funktionieren.

Um eine sichere Sitzung einzurichten, müssen Sie eine Reihe von spezifischen Konfigurationseigenschaften in den Konfigurationsdateien des Clients und des Servers festlegen. Diese Einstellungen finden Sie sicher in den Dokumenten (siehe "errorSecurityContext") oder bei Michele Leroux Bustumantes ausgezeichnete WCF screencast on security fundamentals auf MSDN.

Aber wirklich: Ich würde nicht empfehlen, sichere Sitzung auf alle Fälle zu verwenden. Unter normalen Umständen ist die Verwendung von Diensten pro Anruf die bevorzugte Option, und der Aufwand für die erneute Authentifizierung bei jedem Dienstanruf ist wirklich vernachlässigbar.

Marc