AppDomain.SetPrincipalPolicy(PrincipalPolicy) Metodo

Definizione

Specifica come collegare oggetti Principal e Identity a un thread se si tenta di associare il thread a un Principal durante l'esecuzione nel dominio applicazione.

public void SetPrincipalPolicy (System.Security.Principal.PrincipalPolicy policy);

Parametri

policy
PrincipalPolicy

Uno dei valori dell'enumerazione PrincipalPolicy che specifica il tipo dell'oggetto Principal da associare ai thread.

Implementazioni

Eccezioni

L'operazione viene tentata in un dominio dell'applicazione non caricato.

Esempio

Nell'esempio seguente viene illustrato l'effetto sui thread dell'uso del SetPrincipalPolicy metodo per modificare i criteri principale del dominio applicazione. Mostra anche l'effetto dell'uso del SetThreadPrincipal metodo per modificare l'entità disponibile per il collegamento ai thread nel dominio applicazione.

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();
        }
    }
}

Commenti

L'impostazione di questo valore sarà effettiva solo se la si imposta prima di usare la Thread.CurrentPrincipal proprietà . Ad esempio, se si imposta su Thread.CurrentPrincipal un'entità specifica (ad esempio, un'entità generica) e quindi si usa il SetPrincipalPolicy metodo per impostare su PrincipalPolicy WindowsPrincipal, l'entità corrente rimarrà l'entità generica.

Si applica a

Prodotto Versioni
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1