連載 XML Webサービスのセキュリティ実装

第1回 認証によるクライアントの識別

矢嶋 聡
2003/05/21
Page1 Page2 Page3

1-2 ASP.NETでの認証設定

 本項では、ASP.NETでの認証を利用して、XML Webサービスにアクセスしてみます。

 まずは、ASP.NETが提供する認証方法を確認します。ASP.NETでは、以下の中から認証方法を選択できます(表1)。

認証方法 説明
Windows認証 IISで行った認証ユーザー情報をそのまま流用します。
フォーム認証 未認証のユーザーがアクセスを試みると、独自のログオン・フォーム画面に自動的にリダイレクトします。ログオン・フォームには独自の認証ロジックを実装する必要があります。認証後、本来のアクセス先に再びリダイレクトされます。
Passport認証 未認証のユーザーがアクセスを試みると、マイクロソフトが提供する認証サービスpassport.comにリダイレクトされます。認証後、本来のアクセス先に再びリダイレクトされます。
(なし) 認証を行いません。
表1 ASP.NETが提供する認証

 1つ注意する点は、これらの認証はASP.NETレベルなので、これより前にIISレベルの認証が必要であるという点です。上記のどれを使用しても、IISレベルでの認証は必要になります(IIS側の設定は後述)。

 3つの認証方法のうち、最も簡単な認証方法が「Windows認証」です。これはIISで受けた認証をそのまま利用する方法で、IIS側でいったん認証を受ければ、ASP.NET側で再度認証を要求されることはありません。IISで認証されたユーザー情報を、そのままASP.NETで流用します。構成は簡単ですが、必要なユーザー・アカウントはIIS側で構成します(つまり、Windows OS上にユーザー・アカウントを作ることになります)。

 フォーム認証は、開発者が独自の認証ロジックを実装できる方法で、未認証のユーザーがアクセスしようとすると、サイト内のあらかじめ指定されたログオン用フォームにリダイレクトされます。ログオン・フォームはあらかじめ作っておく必要があり、そのログオン・フォームに投函されたユーザー名やパスワードを評価するロジックは、VB.NETやC#で作る必要があります。フォーム認証に使用できるクラス・ライブラリも用意されています。フォーム認証は、作成の手間はかかりますが、IIS側のユーザー管理から独立して、独自のユーザー管理を行うことができます。ただし、フォーム認証は文字通りHTMLベースのフォーム(ユーザー・インターフェイス)が開くので、XMLデータをやりとりするXML Webサービスのクライアントからは事実上利用できません。

 Passport認証は、フォーム認証と似ており、未認証ユーザーがログオン・フォームにリダイレクトされます。しかし、リダイレクト先が独自のカスタム・フォームではなく、マイクロソフトが提供する認証サービスのサイトになります。マイクロソフトのサイトで認証を受けると、元のアドレスに再びリダイレクトされます。いわば、認証作業をマイクロソフトにアウトソースしたことになります。もちろん、この仕組みを利用するには、あらかじめ手続きが必要です。また、ASP.NETでこのPassport認証を利用するには、別途Passport SDKが必要になります。詳しくは、以下のアドレスを参照してください。

http://www.passport.com/business

 また、表1「ASP.NETが提供する認証」にあるように、もう1つの選択肢として、ASP.NETの認証をオフにする方法もあります。

 今回は、比較的簡単に実装できるWindows認証を、XML Webサービスで利用できるようにします。認証設定は簡単で、構成ファイルであるWeb.config内に記述します。適当なXML WebサービスをVisual Studio .NETで作成し*1(ここではそのプロジェクト名を「WebSrv1」とします)、WebSrv1プロジェクトを編集可能な状態にしてください。そして、ソリューション・エクスプローラのツリー上からWeb.configファイルを開いてください。

*1 編集部注:転載元の「VB.NETによるXML Webサービス開発」では、第7章「XML Webサービスの基本実装」で実際のXML Webサービスの開発手順を詳しく解説しています。

 Web.configファイルの中から、以下のような<authentication>要素を見つけてください。Visual Studio .NETのプロジェクトでは、あらかじめWeb.configファイルにこのような設定が記述されています。

<configuration>
  <system.web>

        (省略)

  <authentication mode="Windows" /> ←認証方法の設定

        (省略)

  </system.web>
</configuration>
例 Web.configファイルでの認証設定(抜粋)

 この要素のmode属性に認証方法を指定します。このmode属性には、以下の4つのうち1つを記述します(表2)。Visual Studio .NETのプロジェクトでは、すでに"Windows"が記述されているので、Windows認証になっています。ここでは、特に変更する必要はありません。確認が済んだら、このファイルを閉じておいてください。

mode属性の値 ASP.NETの認証方法
Windows Windows認証
Forms フォーム認証
Passport Passport認証
None 認証しない
表2 <authentication>要素に設定できる認証方法

 いまのところ、このXML Webサービスにアクセスしても、ログオンらしき操作はありません。Windows認証を選択しているということは、IISの認証をそのまま流用することであり、IIS側では、既定で「匿名アクセス(ログオンを必要としない)」に設定してあるため、特別なログオン操作は必要ありません。

 今度は、このWebSrv1について、IIS側の認証方法を変更します。ここで、IISの管理ツール「インターネット・インフォメーション・サービス」を起動してください*2図2)。

*2 編集部注:転載元の「VB.NETによるXML Webサービス開発」では、6-1-2「実行環境の仕組み」でこの管理ツールの起動方法を解説しています。なお、ここではXML Webサービスは仮想ディレクトリ「WebSrv1」に配置されているものとします。
 
図2 管理ツール「インターネット・インフォメーション・サービス」

 この管理ツールの左ペインのツリーを展開し、「WebSrv1」を見つけて右クリックし、ショートカット・メニューから[プロパティ]を選びます。すると、[WebSrv1のプロパティ]ダイアログボックスが開きます。このダイアログボックスは、WebSrv1などの仮想ディレクトリ単位(アプリケーション単位)の設定を行う画面です。このダイアログボックス上で、[ディレクトリ セキュリティ]タブをクリックします。図3のように表示されます。

図3 [WebSrv1のプロパティ]の[ディレクトリセキュリティ]タブ

 次に、このダイアログボックス上部の、「匿名アクセスおよび認証コントロール」グループ内にある[編集]ボタンをクリックしてください。認証方法を指定する[認証方法]ダイアログボックスが開きます(図4)。

図4 認証方法の設定画面

 この画面では、現在(Windows XP Professionalに既定でIISをインストールした場合)、認証方法の3つのチェック・ボックスが選択可能になっています。それぞれの特徴は、表3のとおりです(ここではXML Webサービスでの認証を可能にする上での、必要最小限の設定を行います。詳細は、IISのオンライン・ヘルプを参照してください。既定では、「http://localhost/」にアクセスすると、IISのオンライン・ヘルプが開くようになっています)。

認証方法 説明
匿名アクセス アクセスするユーザーを識別しません。Windows OSレベルで見た場合、常に一定のユーザー・アカウントで自動的にログオンします。
基本認証 Windowsに依存しない汎用的なログオン方法です。ただし、パスワードはクリア・テキストのまま送られます。
統合Windows認証 通常のWindows認証方法が使われます。パスワードは暗号化されます。ただし、クライアントがWindows認証をサポートする必要があります。
表3 IISの主な認証方法

 このうち、「匿名アクセス」ではユーザー名やパスワードが要求されず、誰でもIISにアクセスできます。内部的には、アクセスするすべてのユーザーが、図4のダイアログボックス上の「ユーザー名」欄で指定された同一のアカウントで、自動的にログオンします。

 「基本認証」と「統合Windows認証」では、ユーザーを識別するために、ユーザー名とパスワードが必要です。表の説明からすると、パスワードの暗号化の点では、統合Windows認証の方がよいといえますが、クライアントがサポートする認証方法に制約がない点では、基本認証の方がよいといえます。基本認証を使用する場合は、パスワードがクリア・テキストのまま送られるので、転送データを暗号化するためにSSL(本連載の第3回目で解説予定)を併用するのが適当です。

 今回は、基本認証を利用します。図4の[認証方法]ダイアログボックスで、「基本認証」のみをチェックし、そのほかのチェック・ボックスはクリアにしてください。基本認証を選択すると、パスワードが暗号化されない旨の警告メッセージが表示されますが、[はい]をクリックしてメッセージを閉じます。最後に、[OK]ボタンをクリックして、すべてのダイアログボックスを閉じてください。

 これで基本認証の設定ができました。ここでInternet Explorerを起動し、次のアドレスを入力して、WebSrv1にアクセスしてみてください*3

http://localhost/WebSrv1/Service1.asmx

*3 編集部注:ここでは仮想ディレクトリ「WebSrv1」内にあるService1.asmxでXML Webサービスが実装されているものとします。

 すると、今度は図5のように、ユーザー名とパスワードを要求してきます。

図5 WebSrv1のアクセス時にログオンを要求する

 既定の構成では、このマシンに登録されたユーザー・アカウントが基本認証に利用されます。現在使用しているマシン上で有効なユーザー・アカウントを入力して(例えば、Administratorなど)、アクセスしてみてください。認証に成功すれば、WebSrv1のHTML説明ページが開きます*4

*4 編集部注:.NET Frameworkでは、ブラウザでXML WebサービスのURL(ここではhttp://localhost/WebSrv1/Service1.asmx)を開いた場合、自動的にHTML説明ページが作成され、XML Webサービスをテストすることができます。

 これで、サービス側の設定はできました。このサービスにアクセスするには、クライアントアプリケーションが、特定のユーザー・アカウントでログオンする必要があります。1-3「クライアントからのログオン」では、クライアントアプリケーション側で特定のユーザー・アカウントを指定して、XML Webサービスにアクセスする方法を説明します。


 INDEX
  連載 XML Webサービスのセキュリティ実装
  第1回 認証によるクライアントの識別
    1-1 ASP.NETを含むセキュリティ構成
  1-2 ASP.NETでの認証設定
    1-3 クライアントからのログオン
 
インデックス・ページヘ  「連載 XML Webサービスのセキュリティ実装」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間