マイクロソフト株式会社 デベロッパーマーケティング本部
デベロッパーエバンジェリスト 辻郷 隆史

最終更新日 2004 年 8 月 4 日

このコンテンツのポイント
  • Web サービスでの基本認証の使用方法について理解する。
  • NetworkCredential クラスによる認証情報の設定方法について理解する。
  • コードによる認証情報の確認方法について理解する。



今回紹介するコード

<Service1.asmx.cs>

C#
[WebMethod]
public string Hello()
{
	return "こんにちは " + Context.User.Identity.Name + " さん"; 
}
 

<Form1.cs>

C#
private void button1_Click(object sender, System.EventArgs e)
{
	WSAuth.Service1 ws = new WSAuth.Service1();
	ws.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text);
	MessageBox.Show(ws.Hello());
}
 

 

目次
はじめに
作成するアプリケーションの概要
Web サービスの作成
Web サービス クライアントの作成
Web サービスへの基本認証の設定
動作と解説
おわりに
補足情報

Visual Basic .NET の内容はこちらに掲載しています。
10 行でズバリ !! Web サービスの認証 (VB.NET)


はじめに

ASP.NET Web サービスでは、様々な認証 / 承認方式を使用することが可能です。
今回の 10 行シリーズでは、その中から NetworkCredential クラスを使用した基本認証について、簡単なサンプル アプリケーションを通して解説します。
なお、Web アプリケーションの基本的な開発方法についての説明は割愛しています。
まず初めに「10 行でズバリ !! ASP.NET による Web サービスの開発 (C#)」および「10 行でズバリ !! Web サービス クライアント アプリケーションの開発 (C#)」 をご覧ください。

 

作成するアプリケーションの概要

今回のサンプルでは、 基本認証を使用する Web サービスと Web サービス クライアントの 2 つのアプリケーションを作成します。
Web サービス クライアントでは、NetworkCredential クラスにより認証情報として ユーザー名およびパスワードを設定し Web サービスを呼び出します。
呼び出された Web サービス側では、認証済みのユーザー情報を取得し文字列として返します。

 

Web サービスの作成

Visual Studio .NET 2003 を起動して、新規にプロジェクトを作成します。
ここでは、[Visual C#プロジェクト]で、[ASP.NET Webサービス] テンプレートを使用します。


図 1. ASP.NET Web サービスの選択

新しく追加された Web サービス (例では "Service1.asmx") へコードを記述します。
メニューより [表示] - [コード] を選択し、以下 Web メソッド Hello のコードを記述します。

[WebMethod]
public string Hello()
{
    return "こんにちは " + Context.User.Identity.Name + " さん";
}

ここでは Context オブジェクトより、認証済みのユーザー名の情報を取得し文字列を追加したものを、Web メソッドの戻り値として返しています。

コードの記述が完了したら、[ビルド] メニューより [WSAuth のビルド] を選択し、 Web サービスのプロジェクトをビルドしておきます。

 

Web サービス クライアントの作成

Web サービス クライアント として、今回は Windows アプリケーション を作成します。
[ファイル] メニューの [プロジェクトの追加] [新しいプロジェクト] を選択し、[Visual C# プロジェクト] で、[Windows アプリケーション] テンプレートを使用します。


図 2. Windows アプリケーション の選択

新しく追加された Windows フォーム ("Form1.cs") に Text コントロール 2 つ、Button コントロール 1 つを配置し、以下の様にプロパティを設定します。

コントロール ID プロパティ名 設定値
Button1 Text "Hello"

 


図 3. Windows フォームのデザイン

[プロジェクト] メニューの [Web 参照の追加] を選択し、今回作成した Web サービス Service1 への参照を追加します。
この例では、Web 参照名 を WSAuth にて追加しています。

次に、Form1.cs デザイン画面の Button1 コントロールをダブルクリックし、以下の赤字で書かれているコードを記述します。

C#
private void button1_Click(object sender, System.EventArgs e)
{
	WSAuth.Service1 ws = new WSAuth.Service1();
	ws.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text);
	MessageBox.Show(ws.Hello());
}
 

Button1 コントロール クリック時のコードを記述します。
Web サービスの Credentials プロパティへ認証情報として、入力されたユーザー名およびパスワードにより生成した、NetworkCredential クラスを設定します。
次に、Hello メソッドを呼び出し、結果をメッセージボックスへ表示します。

Web サービスへの基本認証の設定

今回作成した Web サービスへ基本認証の設定を行います。
スタートメニューの [管理ツール] より [インターネット インフォメーション サービス] を起動します。
今回作成した Web サービス アプリケーション (この例では WSAuth) を右クリックし、メニューよりプロパティを選択します。


図 4. Web サービス アプリケーションのプロパティ選択

次に、[ディレクトリ セキュリティ] タブの [匿名アクセスおよび認証コントロール] - [編集] ボタンをクリックします。


図 5. Web サービス アプリケーションのプロパティ

デフォルトの認証方法では匿名アクセスが有効になっているため、ユーザー名およびパスワードによる認証が行われません。
認証方法ダイアログにて、今回作成した Web サービス アプリケーションの認証方式として基本認証を使用するように設定します。

  • 匿名アクセス のチェックを外す
  • 基本認証 をチェック
  • 統合 Windows 認証 のチェックを外す


図 6. Web サービス アプリケーションの認証方法

基本認証をチェックした際に、下記の警告ダイアログが表示されますが、ここでは [はい] ボタンをクリックします。


図 7. 警告ダイアログ

今回の例では基本認証を使用する際に、ユーザー名およびパスワードなどの認証情報をそのまま使用していますが、実際に基本認証を使用する場合は、SSL 通信などを併せて使用します。

 

IIS にて SSL 通信を使用する場合は、サーバー証明書などの設定が必要となります。
サーバー証明書などの詳細の設定については、下記の資料をご参照ください。

セキュリティテスト用 SSL サーバーの構築 - ステップ バイ ステップ

なお、今回のサンプルプログラムにて SSL を使用する場合は、Web 参照 URL を http から https へ変更する必要があります。

 

動作と解説

サンプル プログラムを実行する前に、Windows アプリケーションをスタートアップ プロジェクトに設定します。
ここでは、ソリューション エクスプローラ上にて Windows アプリケーションを選択後右クリックし、スタートアップ プロジェクトに設定を選択します。


図 8. スタートアップ プロジェクト設定

メニューより [デバッグ] - [開始] (または [F5] キー) を選択し、デバッグ実行をします。
Windows アプリケーションが起動されるので、OS 上で利用可能なユーザー名およびパスワードを入力します。


図 9. Windows アプリケーション

ユーザー名およびパスワードを入力後、Hello ボタンをクリックします。
Web サービスにて正しく認証が行われた場合は、下記のようなメッセージボックスが表示されます。


図 10. メッセージ ボックス

内部の動作としては、下記の順序にて基本認証が実施されています。

(1) 認証情報設定 / Web サービス クライアント
Web サービス Service1 の Credentials プロパティへ入力されたユーザー名およびパスワードによる認証情報 (NetworkCredential クラス) を設定します。
(2) Web メソッド呼び出し / Web サービス クライアント
認証情報の設定を行った Web サービス Service1 の Hello メソッドを呼び出します。
(3) Web サービス 認証 / Web サービス サーバー

Web サービス アプリケーション WSAuth の認証方式として基本認証が設定されているため、Web サービス クライアントからのユーザー名およびパスワードなどの認証情報を使用し、OS のユーザー情報との認証が行われます。
なお、認証に失敗した場合は、下記のダイアログが表示されます。


図 11. エラー ダイアログ

(4) 認証情報取得 / Web サービス サーバー
Context オブジェクトより、認証済みのユーザー名の情報を取得し文字列を追加したものを、Hello メソッドの戻り値として返します。
(5) メッセージボックス表示 / Web サービス クライアント
Hello メソッドの戻り値をメッセージボックスに表示します。

 

おわりに

このように、NetworkCredential クラスを使用した基本認証を使用することにより、 Web サービスにて認証を行うことが可能です。
今回ご紹介した基本認証以外の認証方式の情報については、下記の資料に記載されていますのでご参照ください。

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

Web サービスの場合も Web アプリケーションと同様に、認証情報を元にした URL 承認やプログラムによる承認などを実装することも可能ですので、この機会に是非チャレンジしてみて下さい。

 

補足情報

Web サービスでは WS-Security というセキュリティ仕様が存在します。
WS-Security では認証に関する仕様が定義されており、WS-Security の認証を使用することでも認証を行うことが可能です。

WS-Security 入門

 


 

Code Recipe .NET Framework デベロッパー センター

ページのトップへ