AppDomain.SetPrincipalPolicy(PrincipalPolicy) Метод

Определение

Указывает, как участники и объекты удостоверений должны присоединяться к потоку, если поток пытается выполнить привязку к участнику при выполнении в этом домене приложения.

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

Параметры

policy
PrincipalPolicy

Одно из значений PrincipalPolicy, определяющее тип объекта-участника, который необходимо подключить к потоку.

Реализации

Исключения

Предпринята попытка выполнения операции с выгруженным доменом приложения.

Примеры

В следующем примере показано влияние на потоки использования SetPrincipalPolicy метода для изменения основной политики домена приложения. Здесь также показан эффект использования SetThreadPrincipal метода для изменения субъекта, доступного для присоединения к потокам в домене приложения.

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

Комментарии

Задание этого значения будет эффективным только в том случае, если оно задано перед использованием Thread.CurrentPrincipal свойства . Например, если задать Thread.CurrentPrincipal для заданного субъекта (например, универсального субъекта), а затем использовать SetPrincipalPolicy метод , чтобы задать значение PrincipalPolicyWindowsPrincipal, текущий субъект останется универсальным субъектом.

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.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, 4.8.1
.NET Standard 2.0, 2.1