Ich weiß eine Menge darüber, wie die Kerberos-Authentifizierung funktioniert, aber für mein Leben kann ich kein merkwürdiges Verhalten erklären, das ich bei einem von IIS gehosteten WCF-Dienst sehe.
Ich habe eine extrem einfache WCF-Anwendung eingerichtet, die einen Endpunkt mithilfe von BasicHttpBinding mit TransportCredentialOnly verfügbar macht. Nach meinem Verständnis muss für Kerberos ein Benutzerprinzipalname oder ein Dienstprinzipalname vom Client angegeben werden. Aus irgendeinem Grund scheint es bei verschiedenen Bindungstypen nicht konsistent zu sein.
Wenn ich diesen Principal-Namen auf IIS6 weglasse, wird NTLM verwendet. Auf IIS7 verwendet es Kerberos. Wenn ich einen Benutzerprinzipalnamen auf IIS6 anmelde, wird Kerberos verwendet, aber auf IIS7 schlagen die Aufrufe fehl (Wireshark zeigt einen KRB_AP_ERR_BADMATCH-Fehler während des Kerberos-Handshakes).
Es macht noch mehr Spaß, wenn ich die Bindung an WSHttpBinding mit Nachrichtensicherheit umschalte. Wenn in diesem Experiment der Benutzerprinzipalname auf IIS6 nicht angegeben wird, schlägt der Aufruf fehl und auf IIS7 wird NTLM verwendet. Wenn ich den UPN angeben, schlägt IIS6 fehl und II7 endet mit Kerberos. Hier ist eine Zusammenfassung meiner Ergebnisse. Wenn jemand da draußen mir helfen könnte, mich daran zu gewöhnen, was passiert, wäre ich ewig dankbar.
Kennen Sie die Kernelmodus-Authentifizierung in IIS 7? Dadurch entfällt die Notwendigkeit, eine benutzerdefinierte Identität für den Anwendungspool zu verwenden, und in den meisten Fällen entfällt die Notwendigkeit, der benutzerdefinierten Identität oder dem Hostcomputer SPNs zuzuweisen.
Hier ist ein Blog-Beitrag , der beschreibt, wann Sie SPNs bei Verwendung der Kernel-Modus-Authentifizierung festlegen müssen.