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

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

Resumo

Este tópico explica como implementar a autorização rbac (Controle de Acesso baseada em função) em aplicativos Web com reconhecimento de declarações ASP.NET usando WIF e ACS.

Sumário

  • Objetivos

  • Visão geral

  • Resumo das 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

Objetivos

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

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

  • Implemente verificações de controle de acesso baseadas em função usando o método IsInRole e os atributos PrinciaplPermission.

Visão geral

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

Resumo das 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

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

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

Para criar um aplicativo web ASP.NET simples

  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.

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

Esta etapa mostra como configurar declarações de função no Portal de Gerenciamento do ACS usando grupos de regras. Veja como implementar a lógica de transformação de token usando regras para um passo a passo completo.

Para configurar as declarações de função no Portal de gerenciamento do ACS

  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.

    https://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 como configurar regras mais complexas, consulte Como implementar a lógica de transformação de token usando regras.

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

Esta etapa lhe mostra como implementar o RBAC.

Para implementar o RBAC na página web ASP.NET

  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.");
            }
        }
    }
    

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

Esta é uma etapa opcional. Esta etapa mostra como transformar declarações usando o ClaimsAuthenticationManager, que faz parte do pipeline WIF executado no contexto do aplicativo ASP.NET, em oposição às regras de transformação de declarações executadas no ACS conforme descrito na Etapa 2 – Configurar Declarações de Função no ACS.

Para implementar a transformação de declarações usando um ClaimsAuthenticationManager personalizado

  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.

Etapa 5 – Testar seu trabalho

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.