AppDomain.SetPrincipalPolicy(PrincipalPolicy) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Especifica como objetos de identidade e de entidade de segurança devem ser anexados a um thread se a thread tenta se associar a uma entidade de segurança durante a execução nesse domínio do aplicativo.
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
Um dos valores PrincipalPolicy que especifica o tipo do objeto de entidade de segurança a ser anexado aos threads.
Implementações
Exceções
A operação é tentada em um domínio de aplicativo descarregado.
Exemplos
O exemplo a seguir mostra o efeito nos threads do uso do SetPrincipalPolicy método para alterar a política principal do domínio do aplicativo. Ele também mostra o efeito de usar o SetThreadPrincipal método para alterar a entidade de segurança disponível para anexação a threads no domínio do aplicativo.
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
Comentários
Definir esse valor só será eficaz se você defini-lo antes de usar a Thread.CurrentPrincipal propriedade. Por exemplo, se você definir Thread.CurrentPrincipal como uma determinada entidade de segurança (por exemplo, uma entidade de segurança genérica) e, em seguida, usar o SetPrincipalPolicy método para defini-la PrincipalPolicy WindowsPrincipal, a entidade de segurança atual permanecerá a entidade de segurança genérica.