WCF-Sitzungen mit HTTPS

8

Ich kann nicht herausfinden, wie Instanzen pro Sitzung während der Verwendung von HTTPS für meinen WCF-Dienst aktiviert werden. (Ich bin kein ASP.NET-Experte, möchte aber den ASP.NET-Sitzungsstatus möglichst nicht verwenden.) Ich verwende .NET Framework 3.0.

Ich bin zu dem folgenden Widerspruch gekommen und hoffe, dass mir jemand sagen kann, wo ein Fehler in der Logik ist.

1) Der Dienst muss aufgrund des Mandantenmandats auf IIS 6 gehostet sein.

2) Der Dienst muss den Status zwischen Aufrufen beibehalten, einschließlich SqlConnection- und SqlTransaction-Instanzen (hässlich, aber aufgrund von Projekteinschränkungen erforderlich).

3) Daher muss ich die wsHttpBinding verwenden.

4) Der Dienst muss auf Benutzerauthentifizierungsinformationen von HttpContext.Current.User.Identity zugreifen können (z. B. mithilfe der Windows-Sicherheit in IIS).

5) HTTPS ist daher erforderlich.

6) Die Sicherheit auf Transportebene muss daher für die Bindung konfiguriert werden.

7) Wenn ich den Dienst so konfiguriere, dass Sitzungen erforderlich sind, muss ich wsHttpBinding so konfigurieren, dass er zuverlässige Sitzungen verwendet.

8) Dazu muss die Sicherheit auf Nachrichtenebene für die Bindung konfiguriert sein.

i.e. (6) und (8) schließen sich gegenseitig aus.

Es scheint, dass die Verwendung von WCF-Sitzungen erfordert, dass ich die Sicherheit auf Nachrichtenebene verwende, was die Verwendung von HTTPS verhindert.

Was vermisse ich?

    
Ian Horwill 09.01.2009, 12:53
quelle

2 Antworten

15

3) True , wsHttpBinding und wsDualHttpBinding sind die einzigen HTTP-Bindungen, die Sitzungen unterstützen

5) Falsch Um die Service-Anrufer zu authentifizieren, müssen Sie nicht unbedingt eine Sicherheit auf Transportebene (wie SSL / HTTPS) haben. Die einzige Anforderung besteht darin, IIS so zu konfigurieren, dass Integrierte Windows-Authentifizierung für ein virtuelles Verzeichnis aktiviert wird. Dann haben Sie in WCF drei Möglichkeiten, dieses Szenario zu aktivieren:

a) Verwenden Sie die Sicherheit auf Transportstufe für die wsHttpBinding with Windows-Anmeldeinformationen (HTTPS)

%Vor%

b) Verwenden Sie die Sicherheit auf Nachrichtenebene für die wsHttpBinding mit Windows-Anmeldeinformationen (HTTP)

%Vor%

c) Führen Sie Ihren Dienst im ASP.NET Compatibility Mode aus und aktivieren Sie die Windows-Authentifizierung in ASP.NET (HTTP)

%Vor%

Beachten Sie, dass Sie in a und b auf diese Weise auf die Identität des Aufrufers innerhalb eines Service zugreifen:

%Vor%

6) Wahr , die Sicherheit auf Transportebene muss auf der wsHttpBinding aktiviert sein, um HTTPS zu verwenden

7) False , Reliable Sessions ist eine spezielle Implementierung von Reliable Messaging für WCF-Sitzungen. Reliable Messaging ist eine WS-* -Standardspezifikation zur Gewährleistung der Nachrichtenübermittlung in einem unzuverlässigen Netzwerk. Sie können WCF-Sitzungen ohne Reliable Messaging und umgekehrt verwenden. Sitzungen sind für den Servicevertrag mit diesem Attribut aktiviert:

%Vor%

Denken Sie auch daran, dass Sie zur Aufrechterhaltung des Status zwischen Serviceaufrufen den entsprechenden Instanzmodus für die Implementierung des Servicevertrags explizit aktivieren müssen:

%Vor%

In WCF gibt es zwei Arten von Sitzungen: Sichere Sitzungen und Zuverlässige Sitzungen . Die Standardeinstellung für wsHttpBinding und netTcpBinding besteht in der Verwendung von sicheren Sitzungen.
Für wsHttpBinding wird dies mithilfe der Sicherheit Nachrichtenebene erreicht die Anmeldeinformationen des Clients, die Standardeinstellung für die Bindung.
Für netTcpBinding wird stattdessen die Sitzung auf der Tranport-Ebene mithilfe der Funktionen des TCP-Protokolls eingerichtet .
Dies bedeutet, dass der einfache Wechsel zu wsHttpBinding oder netTcpBinding die Unterstützung von WCF-Sitzungen ermöglicht.
Die Alternative ist die Verwendung von Zuverlässige Sitzungen . Dies muss explizit in der Bindungskonfiguration aktiviert werden und entfernt die Anforderung, Nachrichtensicherheit für die wsHttpBinding zu verwenden. Also wird das funktionieren:

%Vor%

8) False , Reliable Sessions werden unabhängig von den Sicherheitseinstellungen des Kommunikationskanals verwendet.

Eine ausführlichere Erklärung finden Sie in diesem Artikel .

    
Enrico Campidoglio 13.01.2009, 22:28
quelle
2

Im Anschluss an die ausgezeichnete Antwort von Enrico sind dies die Konfigurationen, die ich verwende:

Service:

%Vor%

Kunde:

%Vor%

Hinweis: Trotzdem funktioniert das noch nicht mit der Windows-Authentifizierung.

    
Ian Horwill 25.02.2009 09:17
quelle

Tags und Links