Überschreiben der Identität eines Dienstes zur Authentifizierung

In der Regel müssen Sie die Identität für einen Dienst nicht festlegen, da die Auswahl eines Clientanmeldeinformationstyps über den in den Dienstmetadaten angezeigten Identitätstyp entscheidet. Der folgende Konfigurationscode verwendet beispielsweise die <> > Element und legt die clientCredentialType -Attribut auf Windows.

Das folgende Web Services Description Language (WSDL)-Fragment zeigt die Identität für den zuvor definierten Endpunkt an. In diesem Beispiel wird der Dienst als selbst gehosteter Dienst unter einem bestimmten Benutzerkonto ausgeführt (username@contoso.com) und daher die Identität des Benutzers Benutzerprinzipalnamen (UPN) enthält den Kontonamen. Der UPN wird in einer Windows-Domäne auch als Benutzeranmeldename bezeichnet.

Ein beispielanwendung, die identitätseinstellung veranschaulicht, finden Sie unter Dienstidentitätsbeispiel. Weitere Informationen finden Sie unterDienstidentität, finden Sie unter -Dienstidentität und Authentifizierung.

Kerberos-Authentifizierung und Identität

Wenn ein Dienst so konfiguriert ist, Windows-Anmeldeinformationen verwenden, wird standardmäßig ein <> > -Element, enthält eine <> > oder <> > Element in die WSDL-Datei generiert wird. Wenn der Dienst, unter ausgeführt wird der LocalSystem, LocalService, oder NetworkService -Konto, ein Dienst, der Dienstprinzipalnamen (SPN) wird standardmäßig, in Form von generiert host/ < Hostname> da diese Konten Zugriff auf den Computer-SPN-Daten haben. Wenn der Dienst unter einem anderen Konto ausgeführt wird Windows Communication Foundation (WCF) generiert einen UPN im Format Benutzername>@<DomainName>. Die Kerberos-Authentifizierung erfordert nämlich, dass für den Client ein UPN oder SPN zum Authentifizieren des Dienstes bereitgestellt wird.

Sie können auch das Tool Setspn.exe zur Registrierung eines zusätzlichen SPN beim Konto eines Dienstes in einer Domäne verwenden. Sie können dann den SPN als die Identität des Dienstes verwenden. Zum Herunterladen des Tools finden Sie unter Windows 2000 Resource Kit Tool: Setspn.exe. Weitere Informationen finden Sie unterDas Tool finden Sie unter Setspn Overview.

Hinweis

Zur Verwendung des Windows-Anmeldeinformationstyps ohne Aushandlung muss das Benutzerkonto des Dienstes Zugriff auf den bei der Active Directory-Domäne registrierten SPN haben. Dazu stehen Ihnen folgende Möglichkeiten zur Verfügung:

  • Verwenden Sie das NetworkService- oder das LocalSystem-Konto, um den Dienst auszuführen. Da diese Konten Zugriff auf den beim Hinzufügen des Computers zur Active Directory-Domäne erstellten Computer-SPN haben, generiert WCF automatisch das zutreffende SPN-Element im Endpunkt des Dienstes in den Dienstmetadaten (WSDL).

  • Verwenden Sie ein beliebiges Active Directory-Domänenkonto, um den Dienst auszuführen. Erstellen Sie in diesem Fall mit dem Tool Setspn.exe einen SPN für dieses Domänenkonto. Konfigurieren Sie nach dem Erstellen des SPN für das Konto des Dienstes WCF so, dass dieser SPN für die Clients des Dienstes über seine Metadaten (WSDL) veröffentlicht wird. Legen Sie dazu die Endpunktidentität für den angezeigten Endpunkt entweder mit einer Anwendungskonfigurationsdatei oder mit Code fest.

Weitere Informationen finden Sie unterSPNs, Kerberos-Protokoll und Active Directory finden Sie unter Kerberos Technical Supplement for Windows.

Wenn SPN oder UPN der leeren Zeichenfolge entspricht

Das Festlegen von SPN oder UPN gleich einer leeren Zeichenfolge führt abhängig von der Sicherheitsebene und dem verwendeten Authentifizierungsmodus zu verschiedenen Ergebnissen:

  • Wenn Sie Sicherheit auf Transportebene verwenden, wird die NT LanMan (NTLM)-Authentifizierung ausgewählt.

  • Wenn Sie Sicherheit auf Nachrichtenebene verwenden, schlägt die Authentifizierung abhängig vom Authentifizierungsmodus möglicherweise fehl:

  • Wenn Sie den spnego-Modus verwenden und das AllowNtlm-Attribut auf false festgelegt ist, schlägt die Authentifizierung fehl.

  • Verwenden Sie den spnego-Modus verwenden und ist das AllowNtlm-Attribut auf true festgelegt, schlägt die Authentifizierung fehl, wenn der UPN leer ist; sie ist jedoch erfolgreich, wenn der SPN leer ist.

  • Wenn Sie Kerberos direkt (wird auch als "One-Shot" bezeichnet) verwenden, schlägt die Authentifizierung fehl.

Mithilfe der <> > Element in der Konfiguration

Wenn Sie den Clientanmeldeinformationstyp in der zuvor gezeigten Bindung zu Certificate, ändern, enthält die generierte WSDL ein serialisiertes Base64-X.509-Zertifikat als Identitätswert, wie im folgenden Code gezeigt. Dies ist der Standard für alle Clientanmeldeinformationstypen außer Windows.

Sie können den Wert der standardmäßigen Dienstidentität oder den Typ der Identität mit dem <identity>-Element bei der Konfiguration oder durch Festlegen der Identität im Code ändern. Der folgende Konfigurationscode legt eine DNS-Identität (Domain Name System) mit dem Wert contoso.com fest.

Programmgesteuertes Festlegen der Identität

Der Dienst muss nicht explizit eine Identität angeben, da sie von WCF automatisch bestimmt wird. Allerdings können Sie mit WCF nach Bedarf eine Identität für einen Endpunkt angeben. Mit dem folgenden Code wird ein neuer Dienstendpunkt mit einer bestimmten DNS-Identität hinzugefügt.

ServiceEndpoint ep = myServiceHost.AddServiceEndpoint(
                typeof(ICalculator),
                new WSHttpBinding(),
                String.Empty);
EndpointAddress myEndpointAdd = new EndpointAddress(new Uri("http://localhost:8088/calc"),
     EndpointIdentity.CreateDnsIdentity("contoso.com"));
ep.Address = myEndpointAdd;
Dim ep As ServiceEndpoint = myServiceHost.AddServiceEndpoint(GetType(ICalculator), New WSHttpBinding(), String.Empty)
Dim myEndpointAdd As New EndpointAddress(New Uri("http://localhost:8088/calc"), EndpointIdentity.CreateDnsIdentity("contoso.com"))
ep.Address = myEndpointAdd

Siehe auch

Gewusst wie: erstellen eine benutzerdefinierten Clientidentitätsüberprüfung
Dienstidentität und Authentifizierung