Esta documentação foi arquivada e não está sendo atualizada.

Como: Implementar o controle de acesso baseado na função (RBAC) em um aplicativo ASP.NET com reconhecimento de declaração usando o WIF e o ACS

Publicado: abril de 2011

Atualizado: junho de 2015

Aplica-se a: Azure

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

  • Windows® Identity Foundation (WIF)

  • ASP.NET

Este tópico explica como implementar uma autorização de Controle de acesso baseado na função (RBAC) em aplicativos web ASP.NET com reconhecimento de declaração usando o WIF e o ACS.

  • Objetivos

  • Visão geral

  • Resumo de etapas

  • Etapa 1 - Criar um aplicativo web ASP.NET com reconhecimento de declaração simples

  • Etapa 2 - Configurar as declarações de função no ACS

  • Etapa 3 - Implementar as verificações de função em um Aplicativo web ASP.NET

  • Etapa 4 - Implementar uma transformação de declarações usando um ClaimsAuthenticationManager personalizado

  • Etapa 5: Testar seu trabalho

  • Itens relacionados

  • Configurar as declarações de função usando o ACS.

  • Transformar as declarações de função usando o ClaimsAuthenticationManager.

  • Implementar as verificações de controle de acesso baseadas em funções usando o método IsInRole e os atributos do PrincipalPermission.

O RBAC é uma abordagem amplamente adotada por restringir o acesso em aplicativos. Em aplicativos web ASP.NET, esta abordagem é implementada usando o método IsInRole, o atributo PrincipalPermission, ou demandas, que estiveram disponíveis desde o ASP.NET 1.0. Você pode usar declarações para autorização, portanto, preservando as práticas bem estabelecidas usando novas tecnologias, como o WIF e o ACS. Você pode descarregar o tempo de execução e o SDK do WIF aqui:

  • Etapa 1 - Criar um aplicativo web ASP.NET com reconhecimento de declaração simples

  • Etapa 2 - Configurar as declarações de função no ACS

  • Etapa 3 - Implementar as verificações de função em um Aplicativo web ASP.NET

  • Etapa 4 - Implementar uma transformação de declarações usando um ClaimsAuthenticationManager personalizado

  • Etapa 5: Testar seu trabalho

Esta etapa mostra como criar um aplicativo web ASP.NET que será usado como uma linha de base para implementar o RBAC.

  1. Inicie o Visual Studio com a opção "Executar como administrador". Isto é requerido pelo WIF.

  2. Criar um aplicativo web vazio ASP.NET novo.

  3. Adicionar o formato web aspx, e em seguida atribua um nome, por exemplo, default.aspx.

Esta etapa lhe mostra como configurar as declarações de função no Portal de administração do ACS usando os grupos de regras. Consulte o Como: Implementar a lógica de transformação de token usando regras para um passo a passo completo.

  1. Na página Editar o aplicativo da terceira parte confiável, role para baixo até a seção Grupos de regras, e em seguida clique no link do grupo desejado. Certifique-se que esteja selecionado.

  2. Na página Editar grupo de regras, role para baixo até a seção Regra, e em seguida clique o link Adicionar regra.

  3. Na página Adicionar Regra de declaração, role para baixo até a seção Tipo de declaração de saída, clique no botão de opção Selecionar tipo, e em seguida escolha o seguinte tipo de declaração.

    http://schemas.microsoft.com/ws/2008/06/identity/claims/role
    
    
  4. Na seção Valor de declaração de saída, clique em Inserir valor, e em seguida insira o seguinte texto como um valor na caixa de texto:
    Usuário

  5. Opcionalmente, (recomendado) adicione uma descrição e clique em Salvar.

Acabou de configurar a declaração de função do Usuário que pode ser adicionada a qualquer token. O cenário poderia ser diferente dependendo dos seus requisitos. Para obter mais informações sobre a configuração de regras mais complexas, consulte o Como: Implementar a lógica de transformação de token usando regras.

Esta etapa lhe mostra como implementar o RBAC.

  1. Adicione uma referência ao assembly Microsoft.IdentityModel.

  2. Abra o code-behind default.aspx.cs.

  3. Adicione o seguinte, usando as declarações.

    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
    
  4. Decore o manipulador do evento PageLoad com a seguinte demanda de segurança. Este atributo verificará se o usuário atual está na função do usuário. Se não, será gerada uma exceção.

    [PrincipalPermission(SecurityAction.Demand, Role = "User")]
    
  5. Adicione o código a seguir ao corpo do manipulador do evento Page_Load. Este é exatamente o mesmo que a demanda expressada no código.

    PrincipalPermission p = new PrincipalPermission(null, "User");
       p.Demand();
    
    
  6. Adicione o código a seguir ao corpo do evento Page_Load. Em vez do código anterior, este código não gera uma exceção. Em vez disso, o IsInRole retorna um Booliano indicando se o usuário atual tem a função especificada.

    if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
    
    
  7. O código completado deverá ser semelhante ao seguinte:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
    namespace WebIsInRoleACS
    {
        public partial class _default : System.Web.UI.Page
        {
            //THIS SHOULD THROW AN EXCEPTION
            [PrincipalPermission(SecurityAction.Demand, Role = "User")]
            protected void Page_Load(object sender, EventArgs e)
            {
    
                //THIS SHOULD THROW AN EXCEPTION
                PrincipalPermission p = new PrincipalPermission(null, "User");
                p.Demand();
    
                //THIS RETURNS BOOL
                if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
            }
        }
    }
    
    

Esta é uma etapa opcional. Esta etapa mostra como transformar as declarações usando o ClaimsAuthenticationManager, que é parte do pipeline do WIF que é executado dentro do contexto do aplicativo ASP.NET, em vez das regras de transformação de declarações que são executadas no ACS, conforme descrito em Etapa 2 - Configurar as declarações de função no ACS .

  1. Adicione o projeto Biblioteca de classe à solução do Visual Studio, e em seguida atribua um nome, por exemplo, MyClaimsTransformationModule.

  2. Adicione uma referência ao assembly Microsoft.IdentityModel.

  3. Adicione uma referência ao assembly System.IdentityModel.

  4. Criar uma classe nova, e depois atribuir um nome, por exemplo, ClaimsTransformationModule.

  5. Adicione as declarações a seguir à classe.

    using Microsoft.IdentityModel.Claims;
    using System.Security.Principal;
    
    
  6. Derive a classe do tipo ClaimsAuthenticationManager.

  7. Substitua seu método Autenticar (é aqui onde a transformação de declarações se ocorrerá). Seu código para o método Autenticar pode estar baseado no seguinte.

    if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
    {
        //DECIDE ON SOME CRITERIA IF CURRENT USER DESERVES THE ROLE
        //IClaimsIdentity identity = (IClaimsIdentity)incomingPrincipal.Identity;
        ((IClaimsIdentity)incomingPrincipal.Identity).Claims.Add(
            new Claim(ClaimTypes.Role, "Admin"));
    }
    return incomingPrincipal;
    
    
  8. Alterne para o aplicativo ASP.NET e configure seu ClaimsAuthenticationManager personalizado no seu web.config.

      <microsoft.identityModel>
        <service>
          <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
    
    
  9. Certifique-se que o novo assembly que você criou possa ser localizado pelo aplicativo; a maneira mais simples é colocá-lo na pasta bin do aplicativo.

Esta etapa mostra como validar que a solução funcione. Para testar sua solução, pressione o botão F5. Seu aplicativo web ASP.NET deveria ser executado em modo de depuração (você pode adicionar pontos de interrupção para verificar o código de execução no Visual Studio) Primeiro, você deve ser levado na página de autenticação do provedor de identidade que foi configurado por federação. Após a autenticação for concluída, você deveria ser redirecionado atrás à página Default.aspx sem que uma exceção seja gerada, o que significa que todas as demandas de segurança para a função do Usuário foram atendidas.

Mostrar: