次の方法で共有


.NET Framework のユーザー操作の基礎 (Visual Basic)

.NET Framework では、System.Security.Principal 名前空間にロール ベース セキュリティが実装されています。これは、アプリケーションでのユーザーの承認または認証に使用できます。 このトピックでは、.NET Framework でアプリケーションの承認を操作し、ユーザーを表す IIdentity オブジェクトおよび IPrincipal オブジェクトを作成する方法について説明します。

IIdentity は、認証されたユーザーをカプセル化します。 IPrincipal は、ユーザーの ID と、そのユーザーが持つロールの組み合わせです。 System.Security.Principal 名前空間で定義済みの ID クラスおよびプリンシパル クラスを使用することもできるし、これらのインターフェイスを実装するクラスを作成してカスタム認証を追加することもできます。

これらのインターフェイスを使用するには、インターフェイス名を完全修飾するか、または、関係するソース コード ファイルの先頭に Imports ステートメントを記述して、適切な名前空間をインポートする必要があります。 詳細については、「Imports ステートメント (.NET 名前空間および型)」を参照してください。

.NET Framework アプリケーションでのロール ベース セキュリティの使用

各アプリケーション スレッドには、コードを実行中のユーザーのセキュリティ コンテキストを表すプリンシパル オブジェクトが関連付けられます (CurrentPrincipal プロパティでアクセス可能)。 プリンシパル オブジェクトは、ユーザーのユーザー セキュリティ コンテキスト (つまり ID) オブジェクトをカプセル化します。 2 つのオブジェクトがあるおかげで、認証 (ID オブジェクトによる) と承認 (プリンシパルによる) を分離できます。

ID オブジェクトは IIdentity インターフェイスを実装する必要があります。 Id オブジェクト、特定のユーザーを表すし、次のプロパティに必要な公開、IIdentityインターフェイス。NameIsAuthenticated、および AuthenticationType。 通常、ID オブジェクトには、ユーザー認証を実行するプライベート メンバーが追加されています。

プリンシパル オブジェクトは IPrincipal インターフェイスを実装する必要があります。 プリンシパル オブジェクトに必要な次のメンバーを公開することにより、ユーザーのセキュリティ コンテキストをカプセル化、IPrincipalインターフェイス。IsInRoleメソッドは、承認を実行するとIdentityプロパティは、ユーザーの id オブジェクトへのアクセスを提供します。

ID の操作

.NET Framework には、IIdentity インターフェイスを実装する次の 4 つのクラスが用意されています。

各クラスでは、それぞれ異なる種類のユーザー ID を扱うことができます。 Windows 認証を使用するアプリケーションの現在の WindowsIdentity オブジェクトにアクセスするには、WindowsIdentity クラスの GetCurrent 静的メソッドを使用します。 また、InitializeWithWindowsUser メソッドを呼び出して、現在のスレッドのプリンシパルを設定することもできます。

また、独自のカスタム クラスに IIdentity インターフェイスを実装することにより、カスタムの ID クラスを作成できます。 カスタム ID を作成する方法の詳細については、「チュートリアル: カスタムの認証および承認の実装 (Visual Basic)」を参照してください。

プリンシパルの操作

.NET Framework は、ユーザー ロールと ID をリンクさせるための IPrincipal インターフェイスを提供します。 アプリケーションで承認を実行する場合は、IPrincipal を実装したオブジェクトを使用する必要があります。 たとえば、WindowsIdentity クラスや GenericIdentity クラスには、IPrincipal の実装が組み込まれています。 または、IPrincipal を使用して、独自のカスタム プリンシパル クラスを作成することもできます。

IPrincipal オブジェクトをスレッドの CurrentPrincipal プロパティまたは CurrentPrincipal プロパティに割り当てることで、現在のスレッドをこのオブジェクトにリンクできます。 そして、ユーザーが特定のロールのメンバーかどうか調べることにより、承認チェックを実行できます。 それには、プリンシパルの IsInRole メソッドを使用します。

ASP.NET アプリケーションの場合は、IPrincipal オブジェクトの処理が、他の .NET Framework アプリケーションの場合と異なります。 ASP.NET では、セッションの外観を、状態のない HTTP プロトコル上で作成します。 このセッションの一部として、ユーザーの要求を実行するすべてのコードについて、ユーザーを表す IPrincipal オブジェクトを、HttpContext オブジェクトの User プロパティから利用できます。 共通言語ランタイムは、Global.asax ファイルの OnAuthenticate イベントの後で、CurrentPrincipalUser の値で自動的に更新します。 ASP.NET アプリケーションでは、User プロパティを使用して承認チェックを実行することがよくあります。

注意

User を手動で変更すると、同じ HTTP コンテキスト内で実行されているすべてのスレッドについて、CurrentPrincipal プロパティが自動的に更新されます。 一方、CurrentPrincipal を変更しても、User プロパティには影響しません。 影響が及ぶのは、当該スレッドのリクエストの残りの部分に対してのみです。

ASP.NET アプリケーションでは、CurrentPrincipal プロパティにより User プロパティが更新されます。

独自の IPrincipal 型の作成の詳細については、「チュートリアル: カスタムの認証および承認の実装 (Visual Basic)」を参照してください。

IIdentity オブジェクトおよび IPrincipal オブジェクトを扱うためのアクセス許可の付与

IIdentity オブジェクトを扱うためのアクセス許可を与えるときには注意が必要です。これらのオブジェクトは、機密性の高いユーザー関連情報を利用できるようにするものだからです。 アプリケーションの現在の IPrincipal オブジェクトが変更されないように保護する必要があります。アプリケーションの承認機能は、現在のプリンシパルに基づいて決まるからです。

.NET Framework では、この保護を実現するために、これらの操作にはコード アクセス セキュリティのアクセス許可が必要とされています。 これらのオブジェクトを操作する必要のあるアプリケーションに対し、Caspol.exe (コード アクセス セキュリティ ポリシー ツール) を使用して SecurityPermissionAttribute.ControlPrincipal アクセス許可を与えます。

既定では、このアクセス許可は、ローカルにインストールされたアプリケーションすべてに対して与えられています。これらのアプリケーションは FullTrust アクセス許可セットの下で実行されるからです。

以下のメソッドを実行するには、ControlPrincipal アクセス許可が必要です。

参照

処理手順

チュートリアル: カスタムの認証および承認の実装 (Visual Basic)

参照

User

その他の技術情報

Visual Basic での .NET Framework の認証と承認