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

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

矢嶋 聡
2003/05/21
Page1 Page2 Page3

1-3 クライアントからのログオン

 ユーザーの認証が必要なXML Webサービスにアクセスするには、クライアント側のプロキシ・クラスにユーザー情報を設定する必要があります。ここでは、適当なXML WebサービスのクライアントをVisual Studio .NETで作成したとして*5(ここではそのプロジェクト名を「WinApp2」とします)、このWinApp2プロジェクトを使いながらその設定方法を説明します。

*5 編集部注:転載元の「VB.NETによるXML Webサービス開発」では、第8章「XML Webサービス・クライアントの作成」でXML Webサービスのクライアント作成について詳しく解説しています。WinApp2アプリケーションは、フォーム上の[実行]ボタンがクリックされるとXML Webサービスを呼び出すWindowsアプリケーションです。

 まず、ソリューションWinApp2.slnを開いて、WinApp2プロジェクトを編集可能な状態にしてください。このプロジェクト内のプロキシ・クラスには、まだユーザー情報が設定されていません。今の状態のままでプログラムを実行して、WebSrv1へのアクセスを試みると、アクセスが拒否され、次のメッセージが表示されます(図6)(このメッセージが表示された場合、[終了]ボタンをクリックして、プログラムの実行を終了してください)。

図6 ログオンに失敗しエラーメッセージを表示する

 特定のユーザー・アカウントでログオンしてXML Webサービスにアクセスするには、次の5行目のようにNetworkCredentialsオブジェクトを作り、プロキシ・クラスのCredentialsプロパティに設定します。ここで、次のコードをWinApp2のボタンのイベント・ハンドラButton1_Clickに入力してください*6(ユーザー名とパスワードは現在のマシンで有効なユーザー・アカウントを使ってください)。

*6 編集部注:XML Webサービスのサンプル・クライアントである「WinApp2」では、フォーム上のボタンがクリックされるとXML Webサービスを呼び出します。以下の「リスト1」では、localhost.Service1がXML Webサービスのプロキシ・クラスです。また、6行目で呼び出しているAddメソッドが、XML Webサービスである「WebSrv1」が提供しているメソッドです。
 
1: Imports System.Net

           (省略)

2: Private Sub Button1_Click( ... 省略 ... ) Handles Button1.Click
3:     Dim srv As New localhost.Service1()
4:     Dim n As Integer
5:     srv.Credentials = New NetworkCredential("taro", "pass")
6:     n = srv.Add(200, 300)
7:     TextBox1.Text = CStr(n)
8: End Sub
リスト1 特定のユーザー・アカウントでアクセスする

 5行目のNetworkCredentialsクラスは、System.Net名前空間に属するので、1行目のImportsステートメントをファイルの先頭部分に追加するか、プロジェクト・プロパティにこの名前空間のインポートを指定してください*7

*7 編集部注:転載元の「VB.NETによるXML Webサービス開発」では5-3-2「名前空間のインポート」で、名前空間のインポートについて解説しています。

 結局必要なのは、5行目の記述です。プロキシ・クラスには、Credentialsプロパティがあらかじめ用意されており、XML Webサービスにアクセスする前に、このプロパティに任意のNetworkCredentialsクラスのインスタンスを設定します。NetworkCredentialsのインスタンスを作成する際には、コンストラクタの引数にユーザー名("taro")とパスワード("pass")を指定します*8

*8 転載元の「VB.NETによるXML Webサービス開発」では、8-1-3「プロキシ・クラスの利用」のPOINT「コンストラクタ」で、このコンストラクタについて解説しています。

 ここでビルドして実行し、フォーム上の[実行]ボタンをクリックすると、WinApp2アプリケーションは指定されたパスワードを使ってログオンして、XML Webサービスにアクセスすることができます。

 確認が済んだら、これ以降のために、IIS側の認証方法を「匿名アクセス」と「統合Windows認証」の2つに戻してください(図4「認証方法の設定画面」で認証方法を元に戻してください)。また、ソース・コードからは、NetworkCredentialsを設定した行をコメント化しておいてください。

■TIPS 統合Windows認証の利用

 もし、IIS側で統合Windows認証を選択し、クライアント側のWindowsアプリケーションが現在ログオンしているアカウントを使って、そのまま透過的にログオンしたいのであれば、5行目は次のように書きます。

srv.Credentials = CredentialCache.DefaultCredentials

 CredentialCacheクラスのDefaultCredentialsプロパティは、そのアプリケーション(ここではクライアント)が現在ログオンに使用しているユーザー情報を表しています。End of Article

VB.NETによる XML Webサービス開発

  本記事は@ITハイブックスシリーズ「VB.NETによる XML Webサービス開発」(インプレス)から、一部の内容を編集し転載したものです。本書の詳細は「@ITハイブックス」サイトでご覧いただけます。
 

 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 記事ランキング

本日 月間