HostSecurityManager Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Permite o controlo e personalização do comportamento de segurança para domínios de aplicação.
public ref 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
[<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
- Herança
-
HostSecurityManager
- Atributos
Exemplos
O exemplo seguinte mostra uma implementação muito simples de um 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
Observações
Quando se cria um novo AppDomain, o runtime da linguagem comum interroga o AppDomainManager para a presença de um HostSecurityManager, que participa na tomada de decisões de segurança para o AppDomain. Os fornecedores de host devem implementar um gestor de segurança de host que herde da HostSecurityManager classe.
Notas para Herdeiros
Alguns membros de a HostSecurityManager são chamados sempre que um assembly é carregado, seja implicitamente ou explicitamente. Os ProvideAssemblyEvidence(Assembly, Evidence) métodos e ProvideAppDomainEvidence(Evidence) não devem carregar nenhuma assembleia, pois ao fazê-lo os membros do HostSecurityManager serem chamados recursivamente. Para evitar referências circulares, deve-se criar novas instâncias de classes que possam fazer com que assemblies sejam carregadas, implícita ou explicitamente, no construtor de uma classe que deriva de HostSecurityManager.
Construtores
| Name | Description |
|---|---|
| HostSecurityManager() |
Inicializa uma nova instância da HostSecurityManager classe. |
Propriedades
| Name | Description |
|---|---|
| DomainPolicy |
Obsoleto.
Quando é sobreposto numa classe derivada, obtém a política de segurança do domínio de aplicação atual. |
| Flags |
Recebe a bandeira que representa os componentes da política de segurança que preocupam o anfitrião. |
Métodos
| Name | Description |
|---|---|
| DetermineApplicationTrust(Evidence, Evidence, TrustManagerContext) |
Determina se um pedido deve ser executado. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GenerateAppDomainEvidence(Type) |
Solicita um tipo específico de evidência para o domínio da aplicação. |
| GenerateAssemblyEvidence(Type, Assembly) |
Solicita um tipo específico de prova para a assembleia. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetHostSuppliedAppDomainEvidenceTypes() |
Determina que tipos de evidência o host pode fornecer para o domínio da aplicação, se solicitado. |
| GetHostSuppliedAssemblyEvidenceTypes(Assembly) |
Determina que tipos de evidências o anfitrião pode fornecer para a montagem, se solicitado. |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ProvideAppDomainEvidence(Evidence) |
Fornece a evidência do domínio da aplicação para um assembly a ser carregado. |
| ProvideAssemblyEvidence(Assembly, Evidence) |
Fornece a evidência de montagem de que uma montagem está a ser carregada. |
| ResolvePolicy(Evidence) |
Determina que permissões conceder ao código com base nas evidências especificadas. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |