Compartilhar via


Autorização em aplicativos e serviços web com reconhecimento de declaração

Atualizado: 19 de junho de 2015

Aplica-se ao Azure

Aplica-se A

  • Access Control do Active Directory do Microsoft Azure (também conhecido como Access Control Service ou ACS)

  • SDK do Windows® Identity Foundation (WIF)

  • ASP.NET

  • Windows Communication Foundation (WCF)

Resumo

Em um aplicativo de terceira parte confiável, a autorização determina quais recursos uma identidade autenticada pode acessar e quais operações ela pode executar nesses recursos. A autorização inadequada ou fraca leva à divulgação de informações e à violação de dados. Este tópico descreve as abordagens disponíveis para implementar a autorização para ASP.NET serviços e aplicativos Web com reconhecimento de declarações usando ACS e WIF.

Objetivos

  • Lista as abordagens de autorização que usam declarações.

  • Descreve o design de alto nível para cada abordagem.

  • Indica as vantagens e desvantagens de cada abordagem.

Visão geral

Desde sua primeira versão, o .NET Framework oferece um mecanismo flexível para implementar a autorização. Este mecanismo está baseado em duas interfaces simples—IPrincipal e IIentity. Implementações concretas de IIentity representam um usuário autenticado. Por exemplo, a implementação do WindowsIdentity representa um usuário autenticado pelo Active Directory e GenericIdentity representa um usuário autenticado por uma autenticação personalizada. As implementações concretas do IPrincipal ajudam a verificar permissões usando funções dependendo no armazenamento da função. Por exemplo, WindowsPrincipal verifica WindowsIdentity para obter a associação em grupos do Active Directory. Esta verificação é realizada chamando o método IsInRole na interface IPrincipal. A verificação do acesso com base em funções é chamada de RBAC (Controle de Acesso Baseado em Função). O RBAC é explicado na seção "Controle de acesso baseado em função" deste tópico. As declarações podem ser usadas para transportar informações sobre funções para oferecer suporte a mecanismos de autorização com base em função.

As declarações também podem ser usadas para ativar decisões de autorização mais completas além de funções. As declarações podem estar baseadas virtualmente em qualquer coisa—, idade, CEP, tamanho de sapato e assim sucessivamente. Verificar o acesso baseado em declarações arbitrárias é chamado de Controle de acesso baseado em declarações ou autorização baseada em declarações. A autorização baseada em declarações está explicada na seção "Controle de acesso baseado em declarações" deste tópico.

As verificações de autorização são executadas no lado do aplicativo, não no lado do ACS. O ACS serve como um STS (serviço de token de segurança) que emite tokens que transportam as declarações para o aplicativo. Os tokens são enriquecidos com declarações por provedores de identidade e, opcionalmente, pelo próprio ACS, usando seu mecanismo de regras. Quando o aplicativo recebe o token com declarações, ele pode analisar o token, extrair as declarações relevantes, e fazer as decisões de autorização usando o RBAC ou uma abordagem baseada em declarações. O WIF é usado para analisar o token e fazê-lo usável para decisões de autorização através de uma interface de programação do aplicativos(API) fácil de usar. Para obter mais informações sobre WIF, consulte o SDK do WIF (https://go.microsoft.com/fwlink/?LinkID=187481). Considere o seguinte diagrama ao pensar sobre autorização em aplicativos e serviços com reconhecimento de declaração. Note que durante a autenticação bem sucedida, o provedor de identidade gera um token (o token IdP no diagrama). O token IdP pode ser transformado pelo mecanismo de regras do ACS. O ACS pode adicionar, remover ou alterar as declarações que vêm no token que o provedor de identidade emite. Por fim, o token emitido pelo ACS é enviado para o aplicativo e processado por WIF. A verificação do acesso é realizada no WIF, usando a abordagem de RBAC ou CBAC.

ACS v2 WIF Authorization

Controle de Acesso Baseado em Função

O RBAC é uma abordagem de autorização em que as permissões de usuário são gerenciadas e impostas por um aplicativo baseado em funções de usuário. Se um usuário tem a função necessária para executar uma ação, o acesso é concedido; caso contrário, o acesso é negado.

Método IPrincipal.IsInRole

Para implementar a abordagem RBAC em aplicativos com reconhecimento de declaração, usar o método IsInRole() da interface IPrincipal, exatamente como você faria em aplicativos sem reconhecimento de declaração. Há vários modos de usar o método IsInRole():

  • Explicitamente chamando ao IPrincipal.IsInRole(“Administrator”). Nessa abordagem, o resultado é um booleano. Use-a em suas instruções condicionais. Ela pode ser usada arbitrariamente em qualquer local de seu código.

  • Usando a demanda de segurança PrincipalPermission.Demand(). Nessa abordagem, o resultado é uma exceção caso a demanda não seja atendida. Isso deve se ajustar à sua estratégia de tratamento de exceções. Gerar exceções é muito mais caro desde a perspectiva de desempenho comparado com desativar um Booliano. Isso pode ser usado em qualquer local de seu código.

  • Usando atributos declarativos [PrincipalPermission(SecurityAction.Demand, Role = “Administrator”)]. Essa abordagem é chamada declarativa porque é usada para decorar métodos. Ela não pode ser usada em blocos de códigos dentro das implementações do método. O resultado é uma exceção caso a demanda não seja atendida. Você deve se certificar de que ela se ajuste à sua estratégia de tratamento de exceções.

  • Usando a autorização de URL, usando a <seção de autorização> no web.config. Essa abordagem é adequada quando você está gerenciando a autorização em um nível de URL. Esse é o nível mais grosseiro entre os mencionados anteriormente. A vantagem dessa abordagem é que as alterações são feitas no arquivo de configuração, o que significa que o código não deve ser compilado para se beneficiar da alteração.

Expressando funções como declarações

Quando o método IsInRole() é chamado, há uma verificação feita para ver se o usuário atual tem essa função. Em aplicativos com reconhecimento de declarações, a função é expressa por um tipo de declaração de função que deve estar disponível no token. O tipo de declaração de função é expresso usando o seguinte URI:

https://schemas.microsoft.com/ws/2008/06/identity/claims/role

Há várias maneiras de enriquecer um token com um tipo de declaração de função:

  • Usando o mecanismo de regras acs — nesse caso, você cria uma regra usando o Portal de Gerenciamento do ACS ou o Serviço de Gerenciamento do ACS para criar regras de transformação de declarações que geram declarações de um determinado tipo de função. Para obter mais informações sobre regras e transformação de token, consulte Grupos de Regras e Regras e Como implementar a lógica de transformação de token usando regras.

  • Transformando declarações arbitrarias em declarações de tipo de função usando o ClaimsAuthenticationManager—O ClaimsAuthenticationManager é um componente que fornece como parte do WIF. Ele permite que as solicitações sejam interceptadas quando iniciam um aplicativo, inspecionando os tokens e transformando-os adicionando, alterando ou removendo declarações. Para obter mais informações sobre como usar ClaimsAuthenticationManager para transformar declarações, consulte Como implementar rbac (Controle de Acesso baseado em função) em um aplicativo de ASP.NET com reconhecimento de declarações usando WIF e ACS

  • Mapeamento de declarações arbitrarias a um tipo de função usando a seção de configuração samlSecurityTokenRequirement—Uma abordagem declarativa onde a transformação da declaração é feita usando apenas a configuração e a codificação não é requerida.

Controle de acesso baseado em declarações

O CBAC é uma abordagem de autorização onde a decisão de autorização para conceder ou negar o acesso é baseada em lógica arbitraria que usa os dados disponíveis em declarações para tomar a decisão. Lembre-se de que, no caso do RBAC, a única declaração usada foi a do tipo de função. Uma declaração de tipo de função foi usada para verificar se o usuário pertence à função específica ou não. Para ilustrar o processo de tomada de decisões de autorização usando a abordagem de autorização baseada em declarações, considere as seguintes etapas:

  1. O aplicativo recebe uma solicitação.

  2. O aplicativo extrai as declarações de entrada.

  3. O aplicativo passa as declarações para o mecanismo de lógica de decisão. Pode ser em código na memória ou uma chamada para um serviço web, uma consulta para um banco de dados, ou pode invocar um mecanismo de regras sofisticado.

  4. O mecanismo de decisão calcula o resultado com base nas declarações.

  5. O acesso será concedido se o resultado for true, e negado se for false. Por exemplo, a regra pode ser que o usuário tenha 21 anos ou mais, resida no estado de Washington e tenha sido autenticado pela Windows Live ID (conta microsoft).

O ACS serve como um STS que emite tokens que carregam as declarações. Você pode controlar quais declarações estão sendo emitidas, tanto os tipos de declarações quanto os valores, usando o mecanismo de regras acs. Para saber mais sobre o mecanismo de regras do ACS, consulte Grupos de Regras e Regras e Como implementar a lógica de transformação de token usando regras. O ClaimsAuthorizationManager é primordial para implementar o CBAC em aplicativos com reconhecimento de declaração. O ClaimsAuthorizationManager é um componente que fornece como parte do WIF. O ClaimsAuthorizationManager permite interceptar as solicitações recebidas e implementa as lógicas de sua escolha para tomar decisões de autorização com base nas declarações recebidas. Isto também é um ponto de extensibilidade onde as decisões de autorização podem ser externalizadas e desacopladas do código do aplicativo. Isso é importante quando a lógica de autorização precisa ser modificada. Nesse caso, usar o ClaimsAuthorizationManager não afetará a integridade do aplicativo, reduzindo a probabilidade de um erro do aplicativo em resultado da alteração. Para saber mais sobre como usar ClaimsAuthorizationManager para implementar o controle de acesso baseado em declarações, confira Como implementar a autorização de declarações em um aplicativo de ASP.NET com reconhecimento de declarações usando WIF e ACS.

Consulte Também

Conceitos

Cenários e soluções usando o ACS