Compartir a través de


AppDomain.SetPrincipalPolicy(PrincipalPolicy) Método

Definición

Especifica la forma en que los objetos principales y de identidad deben asociarse a un subproceso si éste intenta enlazarse a un principal mientas se ejecuta en este dominio de aplicación.

public:
 void SetPrincipalPolicy(System::Security::Principal::PrincipalPolicy policy);
public:
 virtual void SetPrincipalPolicy(System::Security::Principal::PrincipalPolicy policy);
public void SetPrincipalPolicy (System.Security.Principal.PrincipalPolicy policy);
member this.SetPrincipalPolicy : System.Security.Principal.PrincipalPolicy -> unit
abstract member SetPrincipalPolicy : System.Security.Principal.PrincipalPolicy -> unit
override this.SetPrincipalPolicy : System.Security.Principal.PrincipalPolicy -> unit
Public Sub SetPrincipalPolicy (policy As PrincipalPolicy)

Parámetros

policy
PrincipalPolicy

Uno de los valores de PrincipalPolicy que especifica el tipo del objeto principal que se va a asociar a los subprocesos.

Implementaciones

Excepciones

La operación se intenta en un dominio de aplicación descargado.

Ejemplos

En el ejemplo siguiente se muestra el efecto en los subprocesos del uso del SetPrincipalPolicy método para cambiar la directiva principal del dominio de aplicación. También muestra el efecto de usar el SetThreadPrincipal método para cambiar la entidad de seguridad que está disponible para asociarse a subprocesos en el dominio de aplicación.

using namespace System;
using namespace System::Security::Principal;
using namespace System::Threading;
ref class ADPrincipal
{
public:
   static void PrintPrincipalInformation()
   {
      IPrincipal^ curPrincipal = Thread::CurrentPrincipal;
      if ( curPrincipal != nullptr )
      {
         Console::WriteLine( "Type: {0}", curPrincipal->GetType()->Name );
         Console::WriteLine( "Name: {0}", curPrincipal->Identity->Name );
         Console::WriteLine( "Authenticated: {0}", curPrincipal->Identity->IsAuthenticated );
         Console::WriteLine();
      }
   }

};

int main()
{
   
   // Create a new thread with a generic principal.
   Thread^ t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();
   
   // Set the principal policy to WindowsPrincipal.
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   currentDomain->SetPrincipalPolicy( PrincipalPolicy::WindowsPrincipal );
   
   // The new thread will have a Windows principal representing the
   // current user.
   t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();
   
   // Create a principal to use for new threads.
   IIdentity^ identity = gcnew GenericIdentity( "NewUser" );
   IPrincipal^ principal = gcnew GenericPrincipal( identity,nullptr );
   currentDomain->SetThreadPrincipal( principal );
   
   // Create a new thread with the principal created above.
   t = gcnew Thread( gcnew ThreadStart( ADPrincipal::PrintPrincipalInformation ) );
   t->Start();
   t->Join();
   
   // Wait for user input before terminating.
   Console::ReadLine();
}
using System;
using System.Security.Principal;
using System.Threading;

class ADPrincipal
{
    static void Main(string[] args)
    {
        // Create a new thread with a generic principal.
        Thread t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Set the principal policy to WindowsPrincipal.
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
            
        // The new thread will have a Windows principal representing the
        // current user.
        t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();

        // Create a principal to use for new threads.
        IIdentity identity = new GenericIdentity("NewUser");
        IPrincipal principal = new GenericPrincipal(identity, null);
        currentDomain.SetThreadPrincipal(principal);
            
        // Create a new thread with the principal created above.
        t = new Thread(new ThreadStart(PrintPrincipalInformation));
        t.Start();
        t.Join();
        
        // Wait for user input before terminating.
        Console.ReadLine();
    }

    static void PrintPrincipalInformation()
    {
        IPrincipal curPrincipal = Thread.CurrentPrincipal;
        if(curPrincipal != null)
        {
            Console.WriteLine("Type: " + curPrincipal.GetType().Name);
            Console.WriteLine("Name: " + curPrincipal.Identity.Name);
            Console.WriteLine("Authenticated: " +
                curPrincipal.Identity.IsAuthenticated);
            Console.WriteLine();
        }
    }
}
open System
open System.Security.Principal
open System.Threading

let printPrincipalInformation () =
    let curPrincipal = Thread.CurrentPrincipal
    if curPrincipal <> null then
        printfn $"Type: {curPrincipal.GetType().Name}"
        printfn $"Name: {curPrincipal.Identity.Name}"
        printfn $"Authenticated: {curPrincipal.Identity.IsAuthenticated}\n"

[<EntryPoint>]
let main _ =
    // Create a new thread with a generic principal.
    let t = Thread(ThreadStart printPrincipalInformation)
    t.Start()
    t.Join()

    // Set the principal policy to WindowsPrincipal.
    let currentDomain = AppDomain.CurrentDomain
    currentDomain.SetPrincipalPolicy PrincipalPolicy.WindowsPrincipal
        
    // The new thread will have a Windows principal representing the
    // current user.
    let t = Thread(ThreadStart printPrincipalInformation)
    t.Start()
    t.Join()

    // Create a principal to use for new threads.
    let identity = GenericIdentity "NewUser"
    let principal = GenericPrincipal(identity, null)
    currentDomain.SetThreadPrincipal principal
        
    // Create a new thread with the principal created above.
    let t = Thread(ThreadStart printPrincipalInformation)
    t.Start()
    t.Join()

    // Wait for user input before terminating.
    Console.ReadLine() |> ignore
    0
Imports System.Security.Principal
Imports System.Threading

Class ADPrincipal
    Overloads Shared Sub Main(ByVal args() As String)
        ' Create a new thread with a generic principal.
        Dim t As New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Set the principal policy to WindowsPrincipal.
        Dim currentDomain As AppDomain = AppDomain.CurrentDomain
        currentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)

        ' The new thread will have a Windows principal representing the
        ' current user.
        t = New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Create a principal to use for new threads.
        Dim identity = New GenericIdentity("NewUser")
        Dim principal = New GenericPrincipal(identity, Nothing)
        currentDomain.SetThreadPrincipal(principal)

        ' Create a new thread with the principal created above.
        t = New Thread(New ThreadStart(AddressOf PrintPrincipalInformation))
        t.Start()
        t.Join()

        ' Wait for user input before terminating.
        Console.ReadLine()
    End Sub


    Shared Sub PrintPrincipalInformation()
        Dim curPrincipal As IPrincipal = Thread.CurrentPrincipal
        If Not (curPrincipal Is Nothing) Then
            Console.WriteLine("Type: " & CType(curPrincipal, Object).GetType().Name)
            Console.WriteLine("Name: " & curPrincipal.Identity.Name)
            Console.WriteLine("Authenticated: " & curPrincipal.Identity.IsAuthenticated)
            Console.WriteLine()

        End If
    End Sub
End Class

Comentarios

Establecer este valor solo será efectivo si lo establece antes de usar la Thread.CurrentPrincipal propiedad . Por ejemplo, si establece Thread.CurrentPrincipal en una entidad de seguridad determinada (por ejemplo, una entidad de seguridad genérica) y, a continuación, usa el SetPrincipalPolicy método para establecer en PrincipalPolicyWindowsPrincipal, la entidad de seguridad actual seguirá siendo la entidad de seguridad genérica.

Se aplica a