HostSecurityManager Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Permite el control y la personalización del comportamiento de la seguridad para los dominios de aplicaciones.
public ref class HostSecurityManager
public class HostSecurityManager
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class HostSecurityManager
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
[System.Security.SecurityCritical]
public class HostSecurityManager
type HostSecurityManager = class
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type HostSecurityManager = class
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
[<System.Security.SecurityCritical>]
type HostSecurityManager = class
Public Class HostSecurityManager
- Herencia
-
HostSecurityManager
- Atributos
Ejemplos
En el ejemplo siguiente se muestra una implementación muy sencilla de .HostSecurityManager
// 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";
}
}
}
' To replace the default security manager with MySecurityManager, add the
' assembly to the GAC and call MySecurityManager in the
' custom implementation of the AppDomainManager.
Imports System.Collections
Imports System.Net
Imports System.Reflection
Imports System.Security
Imports System.Security.Permissions
Imports System.Security.Policy
Imports System.Security.Principal
Imports System.Threading
Imports System.Runtime.InteropServices
Imports System.Runtime.Hosting
<Assembly: System.Security.AllowPartiallyTrustedCallersAttribute()>
<Serializable(), SecurityPermissionAttribute(SecurityAction.Demand, Flags:=SecurityPermissionFlag.Infrastructure)> _
Public Class MySecurityManager
Inherits HostSecurityManager
Public Sub New()
Console.WriteLine(" Creating MySecurityManager.")
End Sub
Private hostFlags As HostSecurityManagerOptions = HostSecurityManagerOptions.HostDetermineApplicationTrust Or HostSecurityManagerOptions.HostAssemblyEvidence
Public Overrides ReadOnly Property Flags() As HostSecurityManagerOptions
Get
Return hostFlags
End Get
End Property
Public Overrides Function ProvideAssemblyEvidence(ByVal loadedAssembly As [Assembly], ByVal evidence As Evidence) As Evidence
Console.WriteLine("Provide assembly evidence for: " + IIf(loadedAssembly Is Nothing, "Unknown", loadedAssembly.ToString()) + ".") 'TODO: For performance reasons this should be changed to nested IF statements
If evidence Is Nothing Then
Return Nothing
End If
evidence.AddAssemblyEvidence(New CustomEvidenceType())
Return evidence
End Function 'ProvideAssemblyEvidence
Public Overrides Function ProvideAppDomainEvidence(ByVal evidence As Evidence) As Evidence
Console.WriteLine("Provide evidence for the " + AppDomain.CurrentDomain.FriendlyName + " AppDomain.")
If evidence Is Nothing Then
Return Nothing
End If
evidence.AddHostEvidence(New CustomEvidenceType())
Return evidence
End Function 'ProvideAppDomainEvidence
<SecurityPermissionAttribute(SecurityAction.Demand, Execution:=True), SecurityPermissionAttribute(SecurityAction.Assert, Unrestricted:=True)> _
Public Overrides Function DetermineApplicationTrust(ByVal applicationEvidence As Evidence, ByVal activatorEvidence As Evidence, ByVal context As TrustManagerContext) As ApplicationTrust
If applicationEvidence Is Nothing Then
Throw New ArgumentNullException("applicationEvidence")
End If
' 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.
Dim enumerator As IEnumerator = applicationEvidence.GetHostEnumerator()
Dim activationArgs As ActivationArguments = Nothing
While enumerator.MoveNext()
activationArgs = enumerator.Current '
If Not (activationArgs Is Nothing) Then
Exit While
End If
End While
If activationArgs Is Nothing Then
Return Nothing
End If
Dim activationContext As ActivationContext = activationArgs.ActivationContext
If activationContext Is Nothing Then
Return Nothing
End If
Dim trust As New ApplicationTrust(activationContext.Identity)
Dim asi As New ApplicationSecurityInfo(activationContext)
trust.DefaultGrantSet = New PolicyStatement(asi.DefaultRequestSet, PolicyStatementAttribute.Nothing)
trust.IsApplicationTrustedToRun = True
Return trust
End Function 'DetermineApplicationTrust
End Class
<Serializable()> _
Public Class CustomEvidenceType
Inherits EvidenceBase
Public Sub New()
End Sub
Public Overrides Function ToString() As String
Return "CustomEvidenceType"
End Function 'ToString
End Class
Comentarios
Al crear un nuevo AppDomain, Common Language Runtime consulta la AppDomainManager presencia de un HostSecurityManagerobjeto , que participa en la toma de decisiones de seguridad para .AppDomain Los proveedores de host deben implementar un administrador de seguridad de host que herede de la HostSecurityManager clase .
Notas a los desarrolladores de herederos
Se llama a algunos miembros de un HostSecurityManager objeto cada vez que se carga un ensamblado, ya sea implícita o explícitamente. Los ProvideAssemblyEvidence(Assembly, Evidence) métodos y ProvideAppDomainEvidence(Evidence) no deben cargar ningún ensamblado, ya que, al hacerlo, se llamarán de forma recursiva a los miembros de .HostSecurityManager Para evitar referencias circulares, debe crear nuevas instancias de clases que puedan hacer que los ensamblados se carguen, ya sea implícita o explícitamente, en el constructor de una clase que deriva de HostSecurityManager.
Constructores
HostSecurityManager() |
Inicializa una nueva instancia de la clase HostSecurityManager. |
Propiedades
DomainPolicy |
Obsoletos.
Si se reemplaza en una clase derivada, obtiene la directiva de seguridad para el dominio de aplicación actual. |
Flags |
Obtiene el marcador que representa los componentes de directiva de seguridad de interés para el host. |
Métodos
DetermineApplicationTrust(Evidence, Evidence, TrustManagerContext) |
Determina si se debe ejecutar una aplicación. |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GenerateAppDomainEvidence(Type) |
Solicita un tipo de evidencia concreto para el dominio de aplicación. |
GenerateAssemblyEvidence(Type, Assembly) |
Solicita un tipo de evidencia concreto para el ensamblado. |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetHostSuppliedAppDomainEvidenceTypes() |
Determina qué tipos de evidencia puede proporcionar el host para el dominio de aplicación, si se solicita. |
GetHostSuppliedAssemblyEvidenceTypes(Assembly) |
Determina qué tipos de evidencia puede proporcionar el host para el ensamblado, si se solicita. |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
ProvideAppDomainEvidence(Evidence) |
Proporciona la evidencia del dominio de aplicación para un ensamblado que se está cargando. |
ProvideAssemblyEvidence(Assembly, Evidence) |
Proporciona la evidencia de ensamblado para un ensamblado que se está cargado. |
ResolvePolicy(Evidence) |
Obsoletos.
Determina qué permisos se conceden al código según la evidencia especificada. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |