Angeben von Nicht-Kerberos-Authentifizierungen in Visual Studio-Projekten

Beim Arbeiten mit Visual Studio 2005 erfordert das Einrichten bestimmter Authentifizierungsmechanismen zusätzliche Schritte. So erfordert beispielsweise die Kerberos-Authentifizierung die SPN-Registrierung (Service Principal Name, Dienstprinzipalname), sowie andere damit verbundene Schritte. Weitere Informationen finden Sie unter Registrieren von Kerberos-Dienstprinzipalnamen (Service Principal Names, SPNs) mithilfe von Http.sys.

In SQL Server 2005 können HTTP-Endpunkte, die für die integrierte Authentifizierung konfiguriert sind, auf Clients antworten, die entweder Kerberos oder NTLM als Authentifizierungsschema verwenden. Welches der beiden Schemas – Kerberos oder NTLM – vom Server ausgewählt und verwendet wird, ist davon abhängig, welches Schema der Client beim Anfordern der Authentifizierung verwendet. Weitere Informationen finden Sie unter Endpunktauthentifizierungs-Typen.

Dieses Thema enthält Details dazu, wie ein Visual Studio 2005-Projekt geändert werden kann, damit eine Webdienste-Clientanwendung ein anderes Authentifizierungsschema als Kerberos anfordert, wenn die integrierte Authentifizierung als Authentifizierungstyp auf dem Server ausgewählt wurde.

Normalerweise müssen Sie beim Schreiben einer Clientanwendung in Visual Studio 2005 Anmeldeinformationen einrichten, die mit den systemeigenen XML-Webdiensten in der SQL Server 2005-Implementierung verwendet werden sollen. Angenommen, Sie verwenden die integrierte Authentifizierung, könnten Sie in Ihren Code etwa Folgendes aufnehmen:

myServer.sql_endpoint proxy = new myServer.sql_endpoint();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;

Wenn die Kerberos-Authentifizierung jedoch nicht ordnungsgemäß eingerichtet wurde, um auch von anderen Computern aus zu funktionieren (SPN-Registrierung usw.), versucht Visual Studio 2005, immer Kerberos als Authentifizierungsschema zu verwenden, es sei denn, Sie deaktivieren Kerberos explizit als zugelassenes Authentifizierungsschema für den HTTP-Endpunkt (sql_endpoint), indem Sie entweder NTLM, BASIC oder DIGEST als Authentifizierungstyp auswählen. Sie können eventuell angeben, dass Visual Studio 2005 anstatt dessen ein anderes unterstütztes Schema, wie NTLM, verwendet.

Der folgende Code zeigt, wie Sie das von Visual Studio 2005 verwendete Authentifizierungsschema außer Kraft setzen und bestimmen können, dass die Clientanwendung NTLM als Authentifizierungsmechanismus anfordert:

mattm1.sql_endpoint proxy = new mattm1.sql_endpoint();
System.Net.CredentialCache myCreds = new System.Net.CredentialCache();

myCreds.Add(new Uri(proxy.Url), "NTLM", System.Net.CredentialCache.DefaultCredentials.GetCredential(new Uri(proxy.Url), "NTLM"));
proxy.Credentials = myCreds;

Sie können zwar erzwingen, dass Visual Studio 2005 an einem Endpunkt mit integrierter Authentifizierung NTLM anstelle von Kerberos verwendet, wie im vorhergehenden Beispielcode gezeigt; es wird jedoch empfohlen, vorzugsweise einen Endpunkt mit AUTHENTICATION=NTLM zu erstellen, um NTLM zu verwenden, wenn Kerberos aufgrund von SPN-Problemen nicht verwendet werden kann.

Zusätzliche Konfigurationsanforderungen an die Entwicklungsumgebung

Die im vorhergehenden Abschnitt erläuterten Codeänderungen ermöglichen der Clientanwendung zwar, ein anderes Authentifizierungsschema als Kerberos anzugeben und zu verwenden; zusätzliche Aufgaben sind jedoch zur Unterstützung der Anwendung beim Ausführen und Testen in der Entwicklungsumgebung erforderlich.

Beachten Sie, dass die Funktionalität zum Hinzufügen von Webverweisen in Visual Studio zum Abrufen der WSDL-Antwort eines Webdienstes standardmäßig immer Kerberos verwendet. Um dies zu umgehen, können Sie folgende Schritte ausführen:

  1. Richten Sie die Kerberos-Authentifizierung für Ihre Entwicklungsumgebung ordnungsgemäß ein. Dies bedeutet das Registrieren von Kerberos-SPNs für Sie als Einzelbenutzer oder, falls zutreffend, für eine Gruppe von Entwicklern in einer Domäne. Weitere Informationen finden Sie unter Registrieren von Kerberos-Dienstprinzipalnamen (Service Principal Names, SPNs) mithilfe von Http.sys.

  2. Deaktivieren Sie Kerberos vorübergehend an dem Endpunkt. Mithilfe der folgenden ALTER ENDPOINT-Prozedur zum Wechseln in den DIGEST-Modus können Sie die WSDL-Antwort problemlos erhalten.

    ALTER ENDPOINT endPointName
    AS HTTP (
       AUTHENTICATION = DIGEST
    )
    
  3. Fügen Sie den Webverweis dem Visual Studio 2005-Projekt hinzu.

  4. Wechseln Sie am Endpunkt wie folgt zurück zum INTEGRATED-Modus:

    ALTER ENDPOINT endPointName
    AS HTTP (
       AUTHENTICATION = INTEGRATED
    )
    

Außerdem können Sie die folgenden Schritte ausführen:

  1. Rufen Sie die WSDL-Antwort über einen anderen Mechanismus ab. Verwenden Sie beispielsweise Internet Explorer, und speichern Sie die WSDL-Antwort in einer Datei.
  2. Fügen Sie den Webverweis nicht als URL, wie beispielsweise http://MyServer/sql_endpoint?wsdl, sondern aus der Datei in Visual Studio ein.

Siehe auch

Verweis

Festlegen, dass der Server Anforderungen systemeigener XML-Webdienste überwacht

Andere Ressourcen

CREATE ENDPOINT (Transact-SQL)
ALTER ENDPOINT (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005