Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ClaimsAuthorizationManager (Clase)

.NET Framework 4.5

Define la implementación base de un administrador de autorización de notificaciones.

System.Object
  System.Security.Claims.ClaimsAuthorizationManager

Espacio de nombres:  System.Security.Claims
Ensamblado:  System.IdentityModel (en System.IdentityModel.dll)

public class ClaimsAuthorizationManager : ICustomIdentityConfiguration

El tipo ClaimsAuthorizationManager expone los siguientes miembros.

  NombreDescripción
Método públicoClaimsAuthorizationManagerInicializa una nueva instancia de la clase ClaimsAuthorizationManager.
Arriba

  NombreDescripción
Método públicoCheckAccessCuando se implementa en una clase derivada, comprueba la autorización para el asunto en el contexto especificado para realizar la acción especificada en el recurso especificado.
Método públicoEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetType Obtiene el Typede la instancia actual. (Se hereda de Object).
Método públicoLoadCustomConfigurationCuando se reemplaza en una clase derivada, carga la configuración personalizada de XML.
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

La clase de ClaimsAuthorizationManager proporciona la implementación base de un administrador de autorización de las peticiones. Un administrador de autorización de las peticiones se puede utilizar en las dos escenarios siguientes:

  • En aplicaciones de Internet y servicios, un administrador de autorización de las peticiones pueden agregarse a la canalización de procesamiento para proporcionar un punto de extensibilidad de que puede autorizar el acceso a un recurso según el valor de demandas de entrada antes de que se llame al código de aplicación que implementa realmente el recurso solicitado.

  • Cuando utiliza la clase de ClaimsPrincipalPermission o la clase de ClaimsPrincipalPermissionAttribute para realizar comprobaciones de acceso demanda- basadas imperativa o declarativa en el código, el sistema llama al administrador de autorización de las peticiones que se configura para la aplicación para realizar la comprobación. Las comprobaciones de acceso Demanda- basadas se pueden realizar en las aplicaciones de Internet y las aplicaciones de escritorio.

La implementación predeterminada proporcionada por la clase de ClaimsAuthorizationManager autoriza el acceso para cada petición mostrada; sin embargo, puede derivar de esta clase e invalidar el método de CheckAccess para proporcionar dispone lógica de autorización.

El uso de un administrador de autorización de las peticiones es opcional. Puede configurar la aplicación para utilizar un administrador de autorización de las peticiones o mediante programación con la clase de IdentityConfiguration o declarativa, especificando el elemento de <claimsAuthorizationManager> , que es un elemento secundario de <identityConfiguration> en el archivo de configuración de la aplicación. Si la aplicación es un sitio Web o una aplicación Web hospedada en internet information services (IIS), también debe agregar ClaimsAuthorizationModule en la colección de los módulos HTTP de ASP.NET.

Nota importanteImportante

Cuando utiliza la clase de ClaimsPrincipalPermission o la clase de ClaimsPrincipalPermissionAttribute , el administrador de autorización de las peticiones que se utiliza para realizar la comprobación de acceso es el que se especifica en la configuración de la identidad en propiedad de FederatedAuthentication.FederationConfiguration . En un archivo de configuración, es la sección de <identityConfiguration> que se hace referencia desde el elemento predeterminado de <federationConfiguration> . Esto es así incluso para los servicios y aplicaciones de escritorio de (WCF) de Windows Communication Foundation.

La clase base de ClaimsAuthorizationManager no toma ninguna configuración adicional; sin embargo, puede reemplazar LoadCustomConfiguration en clases derivadas para proporcionar la inicialización del administrador de autorización de los requisitos de los elementos secundarios de <claimsAuthorizationElement>. El escenario típico es utilizar estos elementos secundarios para especificar directivas de autorización que determinan dice tipos y los valores necesarios para obtener acceso al recurso. No es un requisito completamente, aunque esté libre de definir cualquier uso y sintaxis tiene sentido para la implementación.

Los ejemplos de código que se usan en los temas de ClaimsAuthorizationManager se toman del ejemplo de Claims Based Authorization . Este ejemplo proporciona un administrador de autorización de las peticiones de personalizadas que pueda autorizar los asuntos según una directiva que se especifica en configuración. El administrador de autorización de las peticiones de custom consta de tres componentes básicos: una clase derivada de ClaimsAuthorizationManager que implementa el administrador, la clase de ResourceAction que empareja un recurso y una acción, y un lector de la directiva que lee y compilan la directiva que se especifica en el archivo de configuración. Esta directiva compilada se puede utilizar en el administrador de autorización de peticiones para evaluar un principal para autorizar el acceso a los recursos. No todos los elementos se muestran por brevedad. Para obtener información sobre este ejemplo y otro de disponibles para WIF y sobre dónde descargarlo, vea Índice de ejemplos de código de WIF.

El código siguiente muestra la implementación del administrador de autorización de las peticiones de personalizadas. El método de LoadCustomConfiguration lee y compila la directiva de configuración utilizando la clase auxiliar de lector de la directiva (no se muestra) y las concesiones de método de CheckAccess o deniega el acceso basado en esta directiva.


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Security.Claims;
using System.Xml;

namespace ClaimsAuthorizationLibrary
{
    /// <summary>
    /// Simple ClaimsAuthorizationManager implementation that reads policy information from the .config file
    /// </summary>
    public class MyClaimsAuthorizationManager : ClaimsAuthorizationManager
    {
        static Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>> _policies = new Dictionary<ResourceAction, Func<ClaimsPrincipal, bool>>();
        PolicyReader _policyReader = new PolicyReader();

        /// <summary>
        /// Creates a new instance of the MyClaimsAuthorizationManager
        /// </summary>        
        public MyClaimsAuthorizationManager()
        {
        }

        /// <summary>
        /// Overloads  the base class method to load the custom policies from the config file
        /// </summary>
        /// <param name="nodelist">XmlNodeList containing the policy information read from the config file</param>
        public override void LoadCustomConfiguration(XmlNodeList nodelist)
        {
            Expression<Func<ClaimsPrincipal, bool>> policyExpression;

            foreach (XmlNode node in nodelist)
            {
                //
                // Initialize the policy cache
                //
                XmlDictionaryReader rdr = XmlDictionaryReader.CreateDictionaryReader(new XmlTextReader(new StringReader(node.OuterXml)));
                rdr.MoveToContent();

                string resource = rdr.GetAttribute("resource");
                string action = rdr.GetAttribute("action");

                policyExpression = _policyReader.ReadPolicy(rdr);

                //
                // Compile the policy expression into a function
                //
                Func<ClaimsPrincipal, bool> policy = policyExpression.Compile();

                //
                // Insert the policy function into the policy cache
                //
                _policies[new ResourceAction(resource, action)] = policy;
            }
        }

        /// <summary>
        /// Checks if the principal specified in the authorization context is authorized to perform action specified in the authorization context 
        /// on the specified resoure
        /// </summary>
        /// <param name="pec">Authorization context</param>
        /// <returns>true if authorized, false otherwise</returns>
        public override bool CheckAccess(AuthorizationContext pec)
        {
            //
            // Evaluate the policy against the claims of the 
            // principal to determine access
            //
            bool access = false;
            try
            {
                ResourceAction ra = new ResourceAction(pec.Resource.First<Claim>().Value, pec.Action.First<Claim>().Value);

                access = _policies[ra](pec.Principal);
            }
            catch (Exception)
            {
                access = false;
            }

            return access;
        }
    }
}


El código siguiente se muestra la clase de ResourceAction utilizada por el administrador de las peticiones de personalizadas.



using System;

namespace ClaimsAuthorizationLibrary
{
    /// <summary>
    /// Class to encapsulate resource/action pair
    /// </summary>
    public class ResourceAction
    {
        public string Resource;
        public string Action;

        /// <summary>
        /// Checks if the current instance is equal to the given object by comparing the resource and action values
        /// </summary>
        /// <param name="obj">object to compare to</param>
        /// <returns>True if equal, else false.</returns>
        public override bool Equals(object obj)
        {
            ResourceAction ra = obj as ResourceAction;
            if (ra != null)
            {
                return ((string.Compare(ra.Resource, Resource, true) == 0) && (string.Compare(ra.Action, Action, true) == 0));
            }

            return base.Equals(obj);
        }

        /// <summary>
        /// Gets the hash code.
        /// </summary>
        /// <returns>The hash code.</returns>
        public override int GetHashCode()
        {
            return (Resource + Action).ToLower().GetHashCode();
        }

        /// <summary>
        /// Creates an instance of ResourceAction class.
        /// </summary>
        /// <param name="resource">The resource name.</param>
        /// <param name="action">The action.</param>
        /// <exception cref="ArgumentNullException">when <paramref name="resource"/> is null</exception>
        public ResourceAction(string resource, string action)
        {
            if (string.IsNullOrEmpty(resource))
            {
                throw new ArgumentNullException("resource");
            }

            Resource = resource;
            Action = action;
        }
    }
}


El XML siguiente muestra cómo configurar el administrador de autorización de las peticiones anterior para una aplicación Web hospedada en IIS 7,5. Sólo los elementos específicos de la configuración del administrador de autorización de las peticiones se muestran. Observe que una referencia a la clase de ClaimsAuthorizationModule se debe agregar a la canalización bajo el elemento de <system.Webserver> . Para los sitios y aplicaciones hospedados en versiones de IIS antes de IIS 7 los módulos se pueden agregar a la canalización bajo el elemento de <system.Web> . Esta configuración se muestra pero se marque como comentario.

La directiva utilizada por el administrador de autorización de peticiones se especifica mediante los elementos personalizados de <policy> bajo el elemento de <claimsAuthorizationManager> . En la primera directiva, la entidad de seguridad debe poseer una de las peticiones especificadas para realizar la acción especificada en el recurso especificado. En la segunda directiva, la entidad de seguridad debe poseer ambas peticiones de realizar la acción especificada en el recurso especificado. En todos los demás, la entidad de seguridad automáticamente se concede acceso sin importar las peticiones que posee.

<configuration>
  <configSections>
    <!--WIF 4.5 sections -->
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    ...
    
  </configSections>
  
  ...
  
  <system.web>
    <httpModules>
      <!--WIF 4.5 modules -->
      <!--Not needed here for IIS >= 7 -->
      <!--<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>-->
    </httpModules>
  </system.web>
  
  ...
  
  <system.webServer>
    <modules>
      <!--WIF 4.5 modules -->
      <add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </modules>
  </system.webServer>
  
  ...
  
  <!-- WIF 4.5 s.im section-->
  <system.identityModel>
    <identityConfiguration>
      <claimsAuthorizationManager type="ClaimsAuthorizationLibrary.MyClaimsAuthorizationManager, ClaimsAuthorizationLibrary">
        <policy resource="http://localhost:28491/Developers.aspx" action="GET">
          <or>
            <claim claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" claimValue="developer" />
            <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
          </or>
        </policy>
        <policy resource="http://localhost:28491/Administrators.aspx" action="GET">
          <and>
            <claim claimType="http://schemas.xmlsoap.org/claims/Group" claimValue="Administrator" />
            <claim claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country" claimValue="USA" />
          </and>
        </policy>
        <policy resource="http://localhost:28491/Default.aspx" action="GET">
        </policy>
        <policy resource="http://localhost:28491/" action="GET">
        </policy>
        <policy resource="http://localhost:28491/Claims.aspx" action="GET">
        </policy>
      </claimsAuthorizationManager>
      
      ...
            
    </identityConfiguration>
  </system.identityModel>
  ...
  
</configuration><configuration>
  <configSections>
    <!--WIF 4.5 sections -->
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    ...
    
  </configSections>
  
  ...
  
  <system.web>
    <httpModules>
      <!--WIF 4.5 modules -->
      <!--Not needed here for IIS >= 7 -->
      <!--<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>-->
    </httpModules>
  </system.web>
  
  ...
  
  <system.webServer>
    <modules>
      <!--WIF 4.5 modules -->
      <add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </modules>
  </system.webServer>
  
  ...
  
  <!-- WIF 4.5 s.im section-->
  <system.identityModel>
    <identityConfiguration>
      <claimsAuthorizationManager type="MyClaimsAuthorizationManager.SimpleClaimsAuthoirzationManager, MyClaimsAuthorizationManager" />
      ...
      
  </system.identityModel>
  ...
  
</configuration>

.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft