次の方法で共有


Visual Studio プロジェクトでの Kerberos 以外の認証の指定

Visual Studio 2005 を使用して作業する場合、一部の認証メカニズムの設定には新たな手順が必要になります。たとえば、Kerberos 認証では、SPN (サービス プリンシパル名) の登録とその他の関連する手順が必要になります。詳細については、「Http.sys を使用した Kerberos サービス プリンシパル名の登録」を参照してください。

SQL Server 2005 の場合、統合認証を使用するように構成された HTTP エンドポイントでは、認証方法として Kerberos または NTLM のいずれかを使用してクライアントに応答できます。実際にサーバーで Kerberos と NTLM のどちらの方法が選択および使用されるかは、クライアントからの認証の要求時にどちらの方法が使用されたかに基づいて決定されます。詳細については、「エンドポイント認証の種類」を参照してください。

このトピックでは、サーバーでの認証方法として統合認証が選択されている場合に、Web サービス クライアント アプリケーションが Kerberos 以外の認証方法を要求するように Visual Studio 2005 プロジェクトを変更する方法について詳しく説明します。

通常、Visual Studio 2005 でクライアント アプリケーションを作成するときは、SQL Server 2005 実装のネイティブ XML Web サービスで使用する資格情報を設定する必要があります。統合認証を使用していると仮定すると、次のようなコードを使用できます。

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

ただし、Kerberos 認証が他のコンピュータから機能するように正しく設定されていない場合 (SPN の登録など)、Visual Studio 2005 では、HTTP エンドポイント (sql_endpoint) で使用できる認証方法として Kerberos を明示的に無効にしない限り、必ず Kerberos 認証が使用されます。Kerberos を無効にするには、認証方法として NTLM、BASIC、または DIGEST のいずれかを選択します。Visual Studio 2005 で、Kerberos ではなく、NTLM などの別のサポートされている方法が使用されるように指定できます。

次のコードは、Visual Studio 2005 で使用される認証方法を無効にし、クライアント アプリケーションから Kerberos 認証ではなく NTLM 認証が要求されるように指定する方法を示しています。

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;

上記のコード サンプルを使用して、Visual Studio 2005 によって INTEGRATED エンドポイントで Kerberos ではなく NTLM が使用されるように指定できます。ただし、SPN の問題により Kerberos を使用できないときに、NTLM を使用する方法として AUTHENTICATION=NTLM で構成したエンドポイントを作成することをお勧めします。

開発環境に関するその他の構成要件

前述のように使用しているコードを変更すると、クライアント アプリケーションで Kerberos 以外の認証方法を指定および使用できるようになりますが、開発環境でアプリケーションを実行およびテストしている場合は、アプリケーションをサポートするためにさらに作業が必要になります。

既定では、Visual Studio の "Web 参照の追加" 機能により、Web サービスから WSDL 応答が取得されるときは必ず Kerberos が使用されることに注意してください。この動作を回避するには、回避策として次の手順を実行できます。

  1. 開発環境に合わせて Kerberos 認証を正しく設定します。この場合、シングル ユーザーとして Kerberos SPN を登録するか、可能な場合は開発者のドメイン グループの Kerberos SPN を登録する必要があります。詳細については、「Http.sys を使用した Kerberos サービス プリンシパル名の登録」を参照してください。

  2. エンドポイントで Kerberos を一時的に無効にします。次の ALTER ENDPOINT プロシージャを使用して DIGEST モードに切り替えると、WSDL 応答を正しく取得できます。

    ALTER ENDPOINT endPointName
    AS HTTP (
       AUTHENTICATION = DIGEST
    )
    
  3. Visual Studio 2005 プロジェクトに Web 参照を追加します。

  4. 次のように、エンドポイントを INTEGRATED モードに戻します。

    ALTER ENDPOINT endPointName
    AS HTTP (
       AUTHENTICATION = INTEGRATED
    )
    

また、次の手順を実行することもできます。

  1. Internet Explorer を使用して WSDL 応答をファイルに保存するなど、別のメカニズムによって WSDL 応答を取得します。
  2. URL (http://MyServer/sql_endpoint?wsdl など) としてではなく、Visual Studio でファイルから Web 参照を追加します。

参照

関連項目

ネイティブ XML Web サービス要求をリッスンするためのサーバーの設定

その他の技術情報

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

ヘルプおよび情報

SQL Server 2005 の参考資料の入手