連載
Enterprise Library概説

柔軟なセキュリティ機能を実装しよう

アバナード株式会社 市川 龍太(patterns & practices Champion
2006/06/03
Page1 Page2 Page3

ルールベース認定機能の利用手順

 まず「The Enterprise Library Configuration Console」(以下Configurationコンソール)でSecurityABの構成を設定する。

●ConfigurationコンソールでのSecurityABの追加

 SecurityABをアプリケーションで利用するためには、ConfigurationコンソールでSecurityABの構成管理設定を行っておく必要がある。

ConfigurationコンソールでのSecurityABの追加
Configurationコンソールを起動するには、[スタート]メニュー−[プログラム]−[Microsoft patterns & practices]−[Enterprise Library - January 2006]−[Enterprise Library Configuration]をクリックすればよい。ここでは事前に、新規のアプリケーションを追加しておく必要がある。これを行うには、ツールバーの[New Application]をクリックするか、メニューバーから[File]−[New Application]を選択すればよい。これにより「Application Configuration」ノードがTreeViewコントロールのルートにある[Enterprise Library Configuration]ノードの直下に作成されるはずだ。
  SecurityABを追加する。これを行うには、事前に新規追加しておいた「Application Configuration」ノードの上で右クリックしてコンテキスト・メニューを表示し、そこから[New]−[Security Application Block]を選択すればよい。これにより「Security Application Block」ノードが「Application Configuration」ノードの下に追加され、さらに「Security Application Block」ノードの子ノードとして、「Authorization」ノード、「Security Cache」ノードが追加される(詳細後述)。
  「RuleProvider」を追加する。これを行うにはで追加された「Authorization」ノードの上で右クリックしてコンテキスト・メニューを表示し、そこから[New]−[Authorization Rule Provider]を選択すればよい。
  「SampleRule」を追加する。これを行うにはで追加された「RuleProvider」ノードの上で右クリックしてコンテキスト・メニューを表示し、そこから[New]−[Rule]を選択すればよい。さらに右ペインのNameプロパティの値を「SampleRule」に変更する。

●Rule Expression Editorを使ったルール設定

 次にRule Expression Editorを使って任意のタスクに対する認可ルールを設定してやる必要がある。

 Rule Expression Editorダイアログを表示するには、Configurationコンソールで「SampleRule」ノードのExpressionプロパティ選択時に表示される[...]ボタンをクリックすればよい。

Rule Expression Editorでのルール設定
Rule Expression Editorを表示するには、Configurationコンソールで「SampleRule」ノードのExpressionプロパティを選択している際に表示される[...]ボタンをクリックする。
  ここでは「ManagerロールかDeveloperロールの場合」というルールを設定している。「R:Manager OR R:Developer」の「R:」はロールを意味する。
  Rolesテキストボックスにテストしたいロール名(ここでは「Developer」)を入力し、Testボタンを押下するとボタン上部にテスト結果(ここでは「Authorized」)が表示される。

●「Security Application Block」配下の各ノードにおけるプロパティ設定

 以下の表は、Configurationコンソールにおける各ノードのプロパティ設定例である。

ノード プロパティ 設定値
Security Application Block Default
Authorization
Instance
RuleProvider
DefaultSecurity
Cache
Instance
(なし)
Name Security Application Block
Authorization Name Authorization
RuleProvider Name RuleProvider
SampleRule Expression R:Manager OR R:Developer
Name SampleRule
Security Application Block配下の各ノードのプロパティ設定例
表中の太字の個所がデフォルト設定を変更した設定値である。

 ここまでに完成した内容は、「App.config」(アプリケーション構成ファイル)として、この内容を利用するアプリケーションの(Visual Studioの)プロジェクト・フォルダに保存する(メニューの[File]−[Save Application]を実行)。

 以上でSecurityABのルールベース機能を使う準備が整った。次に実際にこれを使ってみることにしよう。

●ルールベース認可処理を実行する

 以下は、プログラムを実行しようとしているユーザーがDeveloperロールに所属しているユーザーであるかどうかを判定し、結果をコンソール画面に表示するためのサンプル・プログラムである。

using System;
using System.Threading;
using System.Security.Principal;
using Microsoft.Practices.EnterpriseLibrary.Security;

namespace SecurityABStudy
{
  class Program
  {
    static void Main(string[] args)
    {
      AppDomain.CurrentDomain.SetPrincipalPolicy(
        PrincipalPolicy.WindowsPrincipal);
      IPrincipal principal = new GenericPrincipal(
        Thread.CurrentPrincipal.Identity,
        new string[] { "Developer" });

      IAuthorizationProvider ruleProvider =
        AuthorizationFactory.GetAuthorizationProvider();
      bool authorized =
        ruleProvider.Authorize(principal, "SampleRule");

      if (authorized)
        Console.WriteLine("Authorized User");
      else
        Console.WriteLine("Not Authorized User");

      Console.ReadLine();
    }
  }
}
SecurityABを使用したサンプル・プログラム(C#)
なおこのサンプル・プログラムを実行するには、以下のアセンブリを参照設定に追加する必要がある。これらのアセンブリはEntLibをインストールしたディレクトリ(筆者の環境では「C:\Program Files\Microsoft Enterprise Library January 2006\bin」)に配置されている。
 ・Microsoft.Practices.EnterpriseLibrary.Common.dll
 ・Microsoft.Practices.EnterpriseLibrary.Security.dll

 このサンプル・プログラムでは事前準備として、AppDomainクラスのSetPrincipalPolicyメソッドを呼び出すことでWindowsPrincipalオブジェクトを生成して実行ユーザーを取得できるようにし、次に実行ユーザーとDeveloperロールとをひも付けるGenericPrincipalオブジェクトを生成している。

 Configurationコンソールで“R:Manager OR R:Developer”と設定しているため、実行ユーザーは認可される(つまりAuthorizeメソッドの戻り値としてtrueが返却される)のである。

 ここまで解説してきたように、SecurityABが提供するルールベースの認可機能とは、

「Rule Expression Editorを使って認可するためのルールを定義し、
実行ユーザーがそのルールに適応するかどうかを判定する機能」

なのである。

AzManを活用した認定機能の利用方法

 いま説明したAuthorization Rule Providerによるルールベースの認定機能は導入が手軽である半面、ルール情報をアプリケーション構成ファイル(WindowsアプリケーションならApp.config、WebアプリケーションならWeb.config)にしか保持できない。

 しかし実際の業務アプリケーションでは、ユーザーとロールとのマッピング情報などはデータベース上に保持したりすることが多いだろう。

 先に解説したASP.NET 2.0標準のロール管理機能を使えば、マッピング情報を保持する格納ストレージとしてSQL ServerやActive Directoryを利用することができるのだが、このロール管理機能はあくまでASP.NET 2.0を利用したWebアプリケーションが対象になる。

 このため、例えば上記サンプル・プログラムのようなコンソール・アプリケーションやWindowsアプリケーションまでが対象になっているわけではない。その場合はこのAzMan Authorization Provider(以下AzMan Provider)を利用した認定機能が有力な候補となるだろう。

 AzManとは、Windows Server 2003のSP1以降に付属しているロール、タスク、操作、およびユーザーを管理するための管理ツールのことであり、ロール情報をXMLファイル、Active Directory、またはActive Directory Application Mode(ADAM)ストアで管理することができる。

 AzManはMMC(Microsoft Management Console)スナップインであるため、ロールやタスクの管理には専用のコンソールを利用できるようになっている。それではAzMan Providerを利用する前に、AzManの設定手順について解説する。

●Authorization Managerの設定

 AzMan Providerを利用できるようにするには、(開発したアプリケーションの実行環境となる)OSごとにいくつかのやり方がある。

  • Windows Server 2003の場合:
    →Windows Server 2003 SP1以降であればデフォルトで利用可能。

  • Windows XP Professionalの場合:
    Windows Server 2003 Administration Tools Packをインストールする必要がある。
    →AzMan COMオブジェクト用のプライマリ相互運用アセンブリ(PIA:Primary Interop Assembly)をGAC(グローバル・アセンブリ・キャッシュ)にインストールする必要がある*2

  • Windows 2000 Server SP4以降の場合:
    Windows 2000 Authorization Manager Runtimeをインストールする必要がある。
    →AzMan COMオブジェクト用のプライマリ相互運用アセンブリをGAC(グローバル・アセンブリ・キャッシュ)にインストールする必要がある*2

*2 AzMan COMオブジェクト用のプライマリ相互運用アセンブリをインストールするには、Windows 2000 Authorization Manager Runtime(上述の「Windows 2000 Server SP4以降の場合」にインストールするものと同じ)をダウンロードし、その実行ファイル(筆者が試した環境では「Windows(R) 2000 Authorization Manager Runtime.exe」ファイル)を実行する。これにより、「Windows(R) 2000 Authorization Manager Runtime」というフォルダが新規作成され、さらにそのフォルダ内にある「PIA\1.2」フォルダに「Microsoft.Interop.Security.AzRoles.dll」(=AzManバージョン1.2のプライマリ相互運用アセンブリ)が配置されている。ここで、コントロール・パネルの[管理ツール]−[Microsoft .NET Framework 2.0 Configuration]を実行して.NET Framework 2.0用の構成ツールを起動して、左側のツリー・コントロールで[Console Root]−[.NET Framework 2.0 Configuration]−[マイ コンピュータ]−[アセンブリ キャッシュ]を選択し、右側のHTML表示の中から[アセンブリ キャッシュへのアセンブリの追加]というリンクをクリックする。[アセンブリの追加]という名前のファイル選択ダイアログが表示されるので、先ほどのMicrosoft.Interop.Security.AzRoles.dllファイルを選択すれば完了だ。

 OSごとの詳しいインストール手順については以下のURLを参考にするとよいだろう。

 AzManのインストールが終わったら、次にAzManポリシー・ストア(=認定に関するポリシー情報を格納する場所)を作成する必要がある。AzManポリシー・ストアはXMLファイル、Active Directory、またはADAM内に作成することが可能であるが、本稿ではXMLファイル内に作成することにする。


 INDEX
  連載:Enterprise Library概説
  柔軟なセキュリティ機能を実装しよう
    1.ASP.NET 2.0セキュリティ機能
  2.ルールベース認定機能の利用方法
    3.AzManを活用した認定機能の利用方法
 
インデックス・ページヘ  「Enterprise Library概説」


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

本日 月間