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
Inicie o Visual Studio com a opção "Executar como administrador". Isto é requerido pelo WIF.
Criar um aplicativo web vazio ASP.NET novo.
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
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.
Na página Editar grupo de regras, role para baixo até a seção Regra, e em seguida clique o link Adicionar regra.
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
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árioOpcionalmente, (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
Adicione uma referência ao assembly Microsoft.IdentityModel.
Abra o code-behind default.aspx.cs.
Adicione o seguinte, usando as declarações.
using System.Security.Permissions; using System.Threading; using Microsoft.IdentityModel.Claims; using System.Security;
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")]
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();
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.");
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
Adicione o projeto Biblioteca de classe à solução do Visual Studio, e em seguida atribua um nome, por exemplo, MyClaimsTransformationModule.
Adicione uma referência ao assembly Microsoft.IdentityModel.
Adicione uma referência ao assembly System.IdentityModel.
Criar uma classe nova, e depois atribuir um nome, por exemplo, ClaimsTransformationModule.
Adicione as declarações a seguir à classe.
using Microsoft.IdentityModel.Claims; using System.Security.Principal;
Derive a classe do tipo ClaimsAuthenticationManager.
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;
Alterne para o aplicativo ASP.NET e configure seu ClaimsAuthenticationManager personalizado no seu web.config.
<microsoft.identityModel> <service> <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
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.