如何:创建 WindowsPrincipal 对象

更新:2007 年 11 月

有两种创建 WindowsPrincipal 对象的方法,具体取决于代码是必须重复执行基于角色的验证还是只需执行一次验证。

如果代码必须重复执行基于角色的验证,则以下过程中的第一个过程产生的系统开销较小。如果代码只需进行一次基于角色的验证,则可通过使用以下过程中的第二个过程来创建 WindowsPrincipal 对象。

为重复验证创建 WindowsPrincipal 对象

  1. 对由静态 AppDomain.CurrentDomain 属性返回的 AppDomain 对象调用 SetPrincipalPolicy 方法,将指示新策略应该是什么内容的 PrincipalPolicy 枚举值传递给该方法。受支持的值为 NoPrincipalUnauthenticatedPrincipalWindowsPrincipal。以下代码演示了该方法调用。

    AppDomain.CurrentDomain.SetPrincipalPolicy(
        PrincipalPolicy.WindowsPrincipal);
    
    AppDomain.CurrentDomain.SetPrincipalPolicy( _
        PrincipalPolicy.WindowsPrincipal)
    
  2. 设置了策略后,使用静态 Thread.CurrentPrincipal 属性检索封装当前 Windows 用户的主体。由于属性的返回类型为 IPrincipal,因此必须将结果强制转换为 WindowsPrincipal 类型。以下代码将新的 WindowsPrincipal 对象初始化为与当前线程关联的主体的值。

    WindowsPrincipal MyPrincipal = 
        (WindowsPrincipal) Thread.CurrentPrincipal;
    
    Dim MyPrincipal As WindowsPrincipal = _
        CType(Thread.CurrentPrincipal, WindowsPrincipal) 
    

为单次验证创建 WindowsPrincipal 对象

  1. 通过调用静态 WindowsIdentity.GetCurrent 方法初始化新的 WindowsIdentity 对象,该方法查询当前的 Windows 帐户并将有关该帐户的信息放入新创建的标识对象中。以下代码创建新的 WindowsIdentity 对象并将它初始化为当前已通过身份验证的用户。

    WindowsIdentity MyIdentity = WindowsIdentity.GetCurrent();
    
    Dim MyIdentity As WindowsIdentity = WindowsIdentity.GetCurrent()
    
  2. 创建一个新的 WindowsPrincipal 对象,并将在前面的步骤中创建的 WindowsIdentity 对象的值传递给该对象。

    WindowsPrincipal MyPrincipal = new WindowsPrincipal(MyIdentity);
    
    Dim MyPrincipal As New WindowsPrincipal(MyIdentity)
    
  3. 创建了主体对象后,可使用若干方法之一对其进行验证。有关更多信息,请参见 基于角色的安全检查

请参见

概念

主体和标识对象