Прочитать на английском

Поделиться через


HostSecurityManager Класс

Определение

Позволяет настраивать работу системы безопасности домена приложения и управлять ею.

C#
public class HostSecurityManager
C#
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class HostSecurityManager
C#
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
[System.Security.SecurityCritical]
public class HostSecurityManager
Наследование
HostSecurityManager
Атрибуты

Примеры

В следующем примере показана очень простая реализация HostSecurityManager.

C#
// To replace the default security manager with MySecurityManager, add the 
// assembly to the GAC and call MySecurityManager in the
// custom implementation of the AppDomainManager.

using System;
using System.Collections;
using System.Net;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Security.Principal;
using System.Threading;
using System.Runtime.InteropServices;
using System.Runtime.Hosting;

[assembly: System.Security.AllowPartiallyTrustedCallersAttribute()]
namespace MyNamespace
{
    [Serializable()]
    [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.Infrastructure)]
    public class MySecurityManager : HostSecurityManager
    {
        public MySecurityManager()
        {
            Console.WriteLine(" Creating MySecurityManager.");
        }

        private HostSecurityManagerOptions hostFlags = HostSecurityManagerOptions.HostDetermineApplicationTrust |
                                                   HostSecurityManagerOptions.HostAssemblyEvidence;
        public override HostSecurityManagerOptions Flags
        {
            get
            {
                return hostFlags;
            }
        }

        public override Evidence ProvideAssemblyEvidence(Assembly loadedAssembly, Evidence evidence)
        {
            Console.WriteLine("Provide assembly evidence for: " + (loadedAssembly == null ? "Unknown" : loadedAssembly.ToString()) + ".");
            if (evidence == null)
                return null;

            evidence.AddAssemblyEvidence(new CustomEvidenceType());
            return evidence;
        }
        public override Evidence ProvideAppDomainEvidence(Evidence evidence)
        {
            Console.WriteLine("Provide evidence for the " + AppDomain.CurrentDomain.FriendlyName + " AppDomain.");
            if (evidence == null)
                return null;

            evidence.AddHostEvidence(new CustomEvidenceType());
            return evidence;
        }

        [SecurityPermissionAttribute(SecurityAction.Demand, Execution = true)]
        [SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted = true)]
        public override ApplicationTrust DetermineApplicationTrust(Evidence applicationEvidence, Evidence activatorEvidence, TrustManagerContext context)
        {
            if (applicationEvidence == null)
                throw new ArgumentNullException("applicationEvidence");

            // Get the activation context from the application evidence.
            // This HostSecurityManager does not examine the activator evidence
            // nor is it concerned with the TrustManagerContext;
            // it simply grants the requested grant in the application manifest.

            IEnumerator enumerator = applicationEvidence.GetHostEnumerator();
            ActivationArguments activationArgs = null;
            while (enumerator.MoveNext())
            {
                activationArgs = enumerator.Current as ActivationArguments;
                if (activationArgs != null)
                    break;
            }

            if (activationArgs == null)
                return null;

            ActivationContext activationContext = activationArgs.ActivationContext;
            if (activationContext == null)
                return null;

            ApplicationTrust trust = new ApplicationTrust(activationContext.Identity);
            ApplicationSecurityInfo asi = new ApplicationSecurityInfo(activationContext);
            trust.DefaultGrantSet = new PolicyStatement(asi.DefaultRequestSet, PolicyStatementAttribute.Nothing);
            trust.IsApplicationTrustedToRun = true;
            return trust;
        }
    }
    [Serializable()]
    public class CustomEvidenceType : EvidenceBase
    {
        public CustomEvidenceType() { }

        public override string ToString()
        {
            return "CustomEvidenceType";
        }
    }
}

Комментарии

При создании нового AppDomainсреды CLR запрашивает AppDomainManagerHostSecurityManagerналичие , который участвует в принятии решений по безопасности для AppDomain. Поставщики узлов должны реализовать диспетчер безопасности узла, который наследуется от HostSecurityManager класса .

Примечания для тех, кто наследует этот метод

Некоторые члены HostSecurityManager вызываются при загрузке сборки неявно или явно. Методы ProvideAssemblyEvidence(Assembly, Evidence) и ProvideAppDomainEvidence(Evidence) не должны загружать сборки, так как это приведет к рекурсивному вызову членов HostSecurityManager . Чтобы избежать циклических ссылок, следует создавать новые экземпляры классов, которые могут приводить к загрузке сборок (неявно или явно) в конструкторе класса, производного от HostSecurityManager.

Конструкторы

HostSecurityManager()

Инициализирует новый экземпляр класса HostSecurityManager.

Свойства

DomainPolicy
Устаревшие..

При переопределении в производном классе получает политику безопасности для текущего домена приложения.

Flags

Получает флаги, представляющие компоненты политики безопасности, необходимые сайту.

Методы

DetermineApplicationTrust(Evidence, Evidence, TrustManagerContext)

Определяет, должно ли выполняться приложение.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GenerateAppDomainEvidence(Type)

Запрашивает определенный тип свидетельства для домена приложения.

GenerateAssemblyEvidence(Type, Assembly)

Запрашивает определенный тип свидетельства для сборки.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetHostSuppliedAppDomainEvidenceTypes()

Определяет, какие типы свидетельства узел может предоставить домену приложения при запросе.

GetHostSuppliedAssemblyEvidenceTypes(Assembly)

Определяет, какие типы свидетельства узел может предоставить сборке при запросе.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ProvideAppDomainEvidence(Evidence)

Содержит свидетельство домена приложения для загружаемой сборки.

ProvideAssemblyEvidence(Assembly, Evidence)

Содержит свидетельство сборки для загружаемой сборки.

ResolvePolicy(Evidence)
Устаревшие..

Определяет разрешения, которые нужно предоставить коду, на основе определенного свидетельства.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

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

Продукт Версии
.NET 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 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 (package-provided)
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10