次の方法で共有


プリンシパル オブジェクトと ID オブジェクト

この記事は Windows に適用されます。

ASP.NET Core の詳細については、「ASP.NET Core のセキュリティ」を参照してください。

マネージド コードは、IIdentity オブジェクトへの参照を含むIPrincipal オブジェクトを使用して、プリンシパルの ID またはロールを検出できます。 ID オブジェクトとプリンシパル オブジェクトを、ユーザー アカウントやグループ アカウントなどの使い慣れた概念と比較すると便利な場合があります。 ほとんどのネットワーク環境では、ユーザー アカウントはユーザーまたはプログラムを表し、グループ アカウントは特定のカテゴリのユーザーと所有する権限を表します。 同様に、.NET ID オブジェクトはユーザーを表し、ロールはメンバーシップとセキュリティ コンテキストを表します。 .NET では、プリンシパル オブジェクトは ID オブジェクトとロールの両方をカプセル化します。 .NET アプリケーションは、その ID またはより一般的にはロール メンバーシップに基づいてプリンシパルに権限を付与します。

ID オブジェクト

ID オブジェクトは、検証対象のユーザーまたはエンティティに関する情報をカプセル化します。 最も基本的なレベルでは、ID オブジェクトには名前と認証の種類が含まれます。 名前には、ユーザーの名前または Windows アカウントの名前を指定できますが、認証の種類には、Kerberos V5 などのサポートされているログオン プロトコルまたはカスタム値を指定できます。 .NET では、ほとんどのカスタム ログオン シナリオで使用できる GenericIdentity オブジェクトと、アプリケーションが Windows 認証に依存する場合に使用できるより特殊な WindowsIdentity オブジェクトを定義します。 さらに、カスタム ユーザー情報をカプセル化する独自の ID クラスを定義することもできます。

IIdentity インターフェイスは、名前と認証の種類 (Kerberos V5 や NTLM など) にアクセスするためのプロパティを定義します。 すべての ID クラスは、IIdentity インターフェイスを実装します。 ID オブジェクトと、スレッドが現在実行中の Windows プロセス トークンの間には、必要な関係はありません。 ただし、 ID オブジェクトが WindowsIdentity オブジェクトの場合、ID は Windows セキュリティ トークンを表すと見なされます。

プリンシパル オブジェクト

プリンシパル オブジェクトは、コードが実行されているセキュリティ コンテキストを表します。 プリンシパル オブジェクトに関連付けられているロールに基づいてロールベースのセキュリティ付与権限を実装するアプリケーション。 ID オブジェクトと同様に、.NET には GenericPrincipal オブジェクトと WindowsPrincipal オブジェクトが用意されています。 独自のカスタム プリンシパル クラスを定義することもできます。

IPrincipal インターフェイスは、関連付けられた Identity オブジェクトにアクセスするためのプロパティと、Principal オブジェクトによって識別されたユーザーが特定のロールのメンバーであるかどうかを判断するためのメソッドを定義します。 すべての プリンシパル クラスは、 IPrincipal インターフェイスと、必要な追加のプロパティとメソッドを実装します。 たとえば、共通言語ランタイムは、グループ メンバーシップをロールにマッピングするための追加機能を実装する WindowsPrincipal クラスを提供します。

Principal オブジェクトは、アプリケーション ドメイン (AppDomain) 内の呼び出しコンテキスト (CallContext) オブジェクトにバインドされます。 既定の呼び出しコンテキストは、新しい AppDomain ごとに常に作成されるため、 Principal オブジェクトを受け入れるために使用できる呼び出しコンテキストが常に存在します。 新しいスレッドが作成されると、 スレッドの CallContext オブジェクトも作成されます。 プリンシパル オブジェクト参照は、作成中のスレッドから新しいスレッドの CallContext に自動的にコピーされます。 ランタイムがスレッドの作成者に属している プリンシパル オブジェクトを特定できない場合は、 プリンシパル オブジェクトと ID オブジェクトの作成に関する既定のポリシー 従います。

構成可能なアプリケーション ドメイン固有のポリシーは、新しいアプリケーション ドメインに関連付ける プリンシパル オブジェクトの種類を決定するための規則を定義します。 セキュリティ ポリシーで許可されている場合、ランタイムは、現在の実行スレッドに関連付けられているオペレーティング システム トークンを反映する プリンシパル オブジェクトと ID オブジェクトを作成できます。 既定では、ランタイムは認証されていないユーザーを表す プリンシパル オブジェクトと ID オブジェクトを使用します。 ランタイムは、コードがそれらにアクセスするまで、これらの既定の プリンシパル オブジェクトと ID オブジェクトを作成しません。

アプリケーション ドメインを作成する信頼されたコードは、既定の プリンシパル オブジェクトと ID オブジェクトの構築を制御するアプリケーション ドメイン ポリシー 設定できます。 このアプリケーション ドメイン固有のポリシーは、そのアプリケーション ドメイン内のすべての実行スレッドに適用されます。 管理されていない信頼されたホストには、本質的にこのポリシーを設定する機能がありますが、このポリシーを設定するマネージド コードには、ドメイン ポリシーを制御するための System.Security.Permissions.SecurityPermission が必要です。

アプリケーション ドメイン間で プリンシパル オブジェクトを 送信するが、同じプロセス内 (したがって同じコンピューター上) では、リモート処理インフラストラクチャは呼び出し元のコンテキストに関連付けられている プリンシパル オブジェクトへの参照を呼び出し先のコンテキストにコピーします。

こちらも参照ください