IPrincipal 定义一个属性和一种方法,前者用于访问关联的 Identity 对象,而后者用于确定 Principal 对象所标识的用户是否为给定角色的成员。所有 Principal 类都实现 IPrincipal 接口以及任何必需的附加属性和方法。例如,公共语言运行库提供了 WindowsPrincipal 类,该类实现将 Windows NT 或 Windows 2000 组成员条件映射到角色的附加功能。
Principal 对象在应用程序域 (AppDomain) 中绑定到调用上下文 (CallContext) 对象。默认的调用上下文总是用每个新的 AppDomain 创建的,因此总是存在可用于接受 Principal 对象的调用上下文。创建新线程的同时也为该线程创建 CallContext 对象。Principal 对象引用从创建线程自动复制到新线程的 CallContext 中。如果运行库无法确定哪个 Principal 对象属于线程的创建者,它将遵循 Principal 和 Identity 对象创建的默认策略。
可配置的应用程序域特定策略定义了一些规则,用以决定同新的应用程序域关联的 Principal 对象类型。在安全策略的允许范围内,运行库可创建 Principal 和 Identity 对象来反射同当前执行线程关联的操作系统标记。默认情况下,运行库使用 Principal 和 Identity 对象表示未经身份验证的用户。运行库不创建这些默认的 Principal 和 Identity 对象,除非代码试图访问它们。
创建应用程序域的受信任代码可设置应用程序域策略,以控制默认 Principal 和 Identity 对象的构造。此应用程序域特定的策略适用于该应用程序域中的所有执行线程。非托管、受信任的宿主本身就具有设置此策略的能力,但托管代码必须具有控制域策略的 System.Security.Permissions.SecurityPermission 才能设置此策略。
在不同的应用程序域之间、但在同一进程内(因此在同一台计算机上)传输 Principal 对象时,远程结构将同调用方的上下文关联的 Principal 对象引用复制到接受人的上下文中。