如何:创建 WindowsPrincipal 对象

注意

本文适用于 Windows。

有关 ASP.NET 核心的详细信息,请参阅 ASP.NET 核心安全

有两种方法来创建 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)
    
  3. 创建主体对象后,你可以使用若干方法中的一种对其进行验证。

若要创建 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. 创建主体对象后,你可以使用若干方法中的一种对其进行验证。

另请参阅