方法 : Windows 認証用に XML Web サービスを構成する

このトピックの対象は、レガシ テクノロジに特定されています。XML Web サービスと XML Web サービス クライアントは以下を使用して作成してください。 Windows Communication Foundation.

Code Example

次の手順に従って、クライアント資格情報を除くすべての形式の Windows 認証を使用し、クライアント資格情報を構成して Web サービスに渡します。この場合、「クライアント証明書認証」セクションの手順に従います。

Windows 認証用に Web サービスを構成するには

  1. IIS を使用して、Windows 認証を使用するように Web サービスを構成します。

    IIS を使用すると、ディレクトリ レベルまたはファイル レベルでセキュリティを指定できます。ファイル単位で Web サービスのセキュリティを指定する場合は、IIS の .asmx ファイルで Web サービスに対するアクセス許可を設定します。.asmx ファイルは、Web サービスへのエントリ ポイントです。詳細については、IIS のドキュメントを参照してください。

  2. 構成ファイルを変更して、Windows 認証を指定します。

    構成ファイルで、authentication XML 要素の mode 属性に "Windows" を指定します。Windows 認証を使用するように構成ファイルを変更するコード例を次に示します。

    // Fragment of a Web.config file.
    <authentication mode= "Windows">
    </authentication> 
    

Windows 認証を使って Web サービスにクライアント資格情報を渡すには

  1. Web サービスへのプロキシ クラスの新しいインスタンスを作成します。プロキシ クラスが生成されていない場合の詳細については、「XML Web サービス プロキシの作成」を参照してください。

  2. NetworkCredential クラスの新しいインスタンスを作成して、UserNamePasswordDomain の各プロパティを設定します。

  3. CredentialCache の新しいインスタンスを作成します。

  4. CredentialCacheAdd メソッドを使用して、NetworkCredentialCredentialCache に追加します。

  5. CredentialCache のインスタンスを、プロキシ クラスの Credentials プロパティに割り当てます。

    統合 Windows 認証を使用する場合は、Credentials プロパティを System.Net.CredentialCache.DefaultCredentials に設定する必要があります。

    Credentials プロパティが DefaultCredentials に設定されている場合、クライアントはサーバーとネゴシエートする際に、サーバーの構成に応じて Kerberos 認証、NTLM 認証、またはその両方を使用します。

  6. Windows 認証を使用して Web サービス メソッドに渡すクライアント資格情報を設定するコード例を次に示します。

クライアント証明書認証

次の手順に従ってクライアント資格情報を構成し、クライアント資格情報形式の Windows 認証を使用して Web サービスに渡します。

クライアント証明書認証用に Web サービスを構成するには

  1. クライアント証明書を使ってクライアントを認証するように IIS を構成する方法を次に示します。詳細については、IIS のドキュメントを参照してください。

  2. SSL をインストールします。

  3. クライアント証明書を受け入れるように Web アプリケーションを構成します。

  4. 構成ファイルを変更し、Web サービスに対して Windows 認証を指定します。

    構成ファイルで、authentication XML 要素の mode 属性に "Windows" を指定します。Windows 認証を使用するように構成ファイルを変更するコード例を次に示します。

    // Fragment of a Web.config file.
    <authentication mode= "Windows">
    </authentication>
    

クライアント証明書認証を使って Web サービスにクライアント資格情報を渡すには

  1. Web サービスへのプロキシ クラスの新しいインスタンスを作成します。プロキシ クラスが生成されていない場合の詳細については、「XML Web サービス プロキシの作成」を参照してください。

  2. X509Certificate の新しいインスタンスを作成します。

  3. CreateFromCertFile メソッドを呼び出して、ファイルからクライアント証明書を読み込みます。

    クライアントは、信頼できる証明機関からクライアント証明書ファイルを取得できます。詳細については、IIS のドキュメントを参照してください。

  4. プロキシ クラスの ClientCertificates ClientCertificates コレクションに X509Certificate を追加します。

    クライアント証明書を使って、Web サービス クライアントが資格情報を渡す方法のコード例を次に示します。Web サーバーから発行されたクライアント証明書は、CreateFromCertFile メソッドでファイルから読み込まれ、プロキシ クラスの ClientCertificates プロパティに追加されます。

    ' Instantiate proxy class to a Bank Web service.
    Dim bank As BankSession = new BankSession()
    
    ' Load the client certificate from a file.
    Dim x509 As X509Certificate = X509Certificate.CreateFromCertFile("c:\user.cer")
    
    ' Add the client certificate to the ClientCertificates property
    ' of the proxy class.
    bank.ClientCertificates.Add(x509)
    
    ' Call the method on the proxy class, which requires authentication
    ' using client certificates.
    bank.Deposit(500)
    
    // Instantiate proxy class to a Bank Web service.
    BankSession bank = new BankSession();
    
    // Load the client certificate from a file.
    X509Certificate x509 = X509Certificate.CreateFromCertFile(@"c:\user.cer");
    
    // Add the client certificate to the ClientCertificates property
    // of the proxy class.
    bank.ClientCertificates.Add(x509);
    
    // Call the method on the proxy class, which requires
    // authentication using client certificates.
    bank.Deposit(500);
    

Credentials プロパティが System.Net.CredentialCache.DefaultCredentials に設定されている場合、クライアントはサーバーとネゴシエートする際に、サーバーの構成に応じて Kerberos 認証、NTLM 認証、またはその両方を使用します。

Windows 認証を使用して Web サービス メソッドに渡すクライアント資格情報を設定するコード例を次に示します。

Imports System
Imports System.Web.Services.Protocols
Imports System.Net
Imports MyMath

Public Class Calculator
   Public Shared Sub Main()
     ' Create a new instance of the proxy class to an
     ' Web service method. 
     Dim mathproxy As MyMath.Math = New MyMath.Math()
     
     ' Create a new instance of CredentialCache.
     Dim mycredentialCache As CredentialCache = New CredentialCache()

     ' Create a new instance of NetworkCredential using the client
     ' credentials.
       Dim credentials As NetworkCredential = New _          NetworkCredential(UserName,SecurelyStoredPasword,Domain)

     ' Add the NetworkCredential to the CredentialCache.
       mycredentialCache.Add(New Uri(mathproxy.Url), "Basic", _                             credentials)

     ' Add the CredentialCache to the proxy class credentials.
     mathproxy.Credentials = mycredentialCache

     ' Call the method on the proxy class.
     Dim result As Integer 
     result = mathproxy.Add(3,5)
  End Sub
End Class 
using System;
using System.Web.Services.Protocols;
using System.Net;
using MyMath;

public class Calculator
{
  public static void Main() 
  {
     // Create a new instance of the proxy class to an XML
     // Web service method. 
     MyMath.Math math = new MyMath.Math();

    // Create a new instance of CredentialCache.
    CredentialCache credentialCache = new CredentialCache();

   // Create a new instance of NetworkCredential using the client
   // credentials.
   NetworkCredential credentials = new
      NetworkCredential(UserName,SecurelyStroredPassword,Domain);

   // Add the NetworkCredential to the CredentialCache.
   credentialCache.Add(new Uri(math.Url),                        "Basic", credentials);

   // Add the CredentialCache to the proxy class credentials.
   math.Credentials = credentialCache;

     // Call the method on the proxy class.
     int result = math.Add(3,5);
  }
}

参照

処理手順

方法 : SOAP ヘッダーを使用してカスタム認証を実行する

リファレンス

NetworkCredential
CredentialCache
X509Certificate

概念

ASP.NET を使用して作成した XML Web サービスのセキュリティ

その他のリソース

ASP.NET Web Application Security
ASP.NET を使用した XML Web サービス