WCF- und Kerberos-Authentifizierung

8

Ich habe zahlreiche msdn-Artikel und die Codeplex-Anleitung befolgt, kann aber WCF nicht mit Kerberos-Authentifizierung und Delegierung arbeiten lassen und würde mich über ein wenig Hilfe freuen.

Einrichtung

Ich habe den WCF-Dienst in einer IIS-Website auf einem Remote-Computer

  • IIS 6.0 unter Windows 2003 R2 - SP 2
  • Der SPN für das Gerät wurde hinzugefügt (http / myserver & amp; http / myserver: 8080)
  • Ein AD-Konto wurde für den IIS-App-Pool erstellt
  • Das AD-Konto verfügt über die Einstellung delegation (für Kerberos) zulassen, die auf true
  • festgelegt ist

Ich benutze Brian Booth's Debug-Site auf 8080 und die Site übergibt alle Anforderungen für die Kerberos-Delegation. Auf der Debug-IIS-Site ist die anonyme Authentifizierung deaktiviert und die integrierte Windows-Authentifizierung aktiviert.

Ich habe diese Einstellungen auf der Site gespiegelt, die den WCF-Dienst hostet.

Webdienst - Webkonfiguration (Original)

%Vor%

Webdienst - Webmethode

%Vor%

Client-App - App-Konfiguration

%Vor%

Anwendungsfehler

Der folgende Fehler tritt auf, wenn meine Testanwendung, eine WinForms-Anwendung, versucht, die Webmethode aufzurufen:

  

"Die HTTP-Anfrage ist nicht autorisiert mit   Client-Authentifizierungsschema   'Anonym'. Der Authentifizierungsheader   vom Server empfangen wurde   'Verhandeln, NTLM'. "

Ereignisprotokoll

Der folgende Fehler ist im Ereignisprotokoll:

  

Ausnahme:   System.ServiceModel.ServiceActivationException:   Der Dienst '/ Service.svc' kann nicht sein   aktiviert wegen einer Ausnahme während   Zusammenstellung. Die Ausnahmemeldung   ist: Sicherheitseinstellungen für diesen Dienst   erfordert "Anonymous" -Authentifizierung aber   Es ist nicht für den IIS aktiviert   Anwendung, die diesen Dienst hostet.

Was ich nicht verstehe. Der ganze Sinn dieses Dienstes besteht darin, keine anonyme Authentifizierung zuzulassen, jeder Benutzer / jede Anfrage muss mit Kerberos-Tickets authentifiziert werden und dann an andere Maschinen weitergeleitet werden.

Wie sollte ich diesen WCF-Dienst für die Kerberos-Authentifizierung und Delegierung konfigurieren?

Revision 1

Nach dem Lesen von dieser SO-Frage habe ich den Metadatenendpunkt entfernt. Dies hat das Problem nicht gelöst.

Revision 2

Nach weiteren Recherchen habe ich ein paar Posts gefunden, die vorschlagen, wsHttpBinding zu basicHttpBinding zu ändern. Die Änderung an diesem Teil der Datei web.config wurde unten eingefügt, und der Dienstendpunkt wurde aktualisiert, um auf diese Bindung zu verweisen.

Web-Service - Web-Konfiguration (überarbeitet)

%Vor%

Client-App - App-Konfiguration (überarbeitet)

%Vor%

Fehler (überarbeitet)

Der aktuelle Fehler sieht so aus, als ob er einen Kerberos-Authentifizierungsheader enthält.

  

Die HTTP-Anfrage ist nicht autorisiert mit   Client-Authentifizierungsschema   'Verhandeln'. Der Authentifizierungsheader   vom Server empfangen wurde   'Verhandeln SOMEHUGESCARYKEYHERE

    
blu 18.08.2009, 18:01
quelle

4 Antworten

7

Für mich funktioniert das aktuelle Setup:

Auf dem Server:

%Vor%

Legen Sie das folgende Attribut für alle Methoden für den WCF fest:

%Vor%

Auf dem Client:

%Vor%

HTH, Sven

    
Sven Sönnichsen 10.09.2009 09:18
quelle
3

Etwas, das ich bemerkt habe: Die Client- und Serverkonfiguration scheinen sich nicht auf den Sicherheitsmodus zu einigen.

Im ursprünglichen Abschnitt haben Sie <security>..... in der Datei web.config (die Option mode="message" ausgelassen) und <security mode="Message"> auf der Clientseite.

Nach der Bearbeitung scheint die Clientseite unverändert zu sein, aber der Server (web.config) enthält jetzt <security mode="TransportCredentialOnly"> .

Die Frage ist wirklich: Können Sie garantieren, dass es immer nur einen Netzwerkabschnitt zwischen dem Client und dem Server gibt, der aufgerufen wird? I.e. ist das hinter einer Unternehmensfirewall? In diesem Fall würde ich die netTcp-Bindung mit <security mode="Transport"> an beiden Enden empfehlen.

Wenn das nicht der Fall ist, dann geht es Ihnen entweder mit wsHttpBinding (das mehr Sicherheits- und Zuverlässigkeitsfunktionen unterstützt, aber langsamer und "schwerer" ist) oder basicHttpBinding. In diesem Fall müssten Sie <security mode="Message"> an beiden Enden verwenden und den Dienst mit einem Zertifikat authentifizieren (so dass der Dienst und der Client ein gemeinsames "Geheimnis" haben, das für die Verschlüsselung verwendet werden kann).

Ich würde versuchen, die Identitätswechsel-Teile für den Anfang auszulassen und nur die grundlegende Kommunikation und gegenseitige Authentifizierung zwischen Dienst und Client zu erhalten - sobald das vorhanden ist, können Sie beginnen, die Identitätswechsel-Bits hinzuzufügen, und Sie können immer auf eine bekannte Konfiguration zurückgreifen, die funktioniert.

David Sackstein hat eine eine großartige Reihe von Blogposts , in denen die fünf Sicherheitsszenarien erläutert werden, die der Branchenguru Juval Lowy (in seiner Programmierung WCF <) identifiziert hat / a> book - the WCF Bible) als das gebräuchlichste und nützlichste - um die Anzahl der möglichen Kombinationen von Parametern zu begrenzen, die Sie vielleicht optimieren möchten. Einer von ihnen ist ein "Internet" -Szenario, das wahrscheinlich hier gelten würde, wenn Ihr Dienst nach außen ausgerichtet ist.

Marc

    
marc_s 18.08.2009 20:49
quelle
2

Sie müssen eine behaviorConfiguration in Ihrer Client-Konfiguration angeben. SVCUtil wird nicht automatisch generiert. Dies hat mein Problem gelöst und ich verwende jetzt erfolgreich Kerberos. Es war eine Mission!

%Vor%     
Jonathan 14.06.2011 15:34
quelle
1

Sie sollten Ihre anfängliche Konfiguration versuchen und sicherstellen, dass der IIS gleichzeitig als anonyme und Windows-Authentifizierung festgelegt wird. Der Grund ist, wenn Sie wsHttpBinding verwenden, ist die Standardsicherheit die Nachrichtensicherheit und es ist keine Transportsicherheit definiert, außer Sie möchten um https zu machen. SO Clr gibt an, dass auf dem IIS eine anonyme Authentifizierung aktiviert sein muss.

    
user507040 17.11.2010 02:29
quelle

Tags und Links