Como: Implementar Controlo de Acesso baseado em funções (RBAC) numa aplicação de ASP.NET consciente de reclamações utilizando WIF e ACS
Atualizado: 19 de junho de 2015
Aplica-se a: Azure
Aplica-se A
Microsoft Azure Ative Directory Controlo de Acesso (também conhecido como serviço de Controlo de Acesso ou ACS)
® Fundação Windows identidade (WIF)
ASP.NET
Resumo
Este tópico explica como implementar a autorização de Controlo de Acesso (RBAC) baseada em créditos conscientes ASP.NET aplicações web utilizando WIF e ACS.
Conteúdos
Objetivos
Descrição Geral
Resumo dos Passos
Passo 1 – Criar uma aplicação web de ASP.NET simples
Passo 2 - Configurar as reivindicações de funções na ACS
Passo 3 – Implementar verificações de funções numa aplicação web ASP.NET
Passo 4 – Implementar uma transformação de reclamações utilizando um gerente de crédito personalizado
Passo 5 – Teste o seu trabalho
Itens Relacionados
Objetivos
Configure as alegações de função utilizando o ACS.
Transforme as reivindicações de funções usando o ClaimsAuthenticationManager.
Implementar controlos de controlo de acesso baseados em funções utilizando o método IsInRole e os atributos PrinciaplPermission.
Descrição Geral
O RBAC é uma abordagem amplamente adotada para restringir o acesso em aplicações. Em ASP.NET aplicações web, esta abordagem é implementada utilizando o método IsInRole, o atributo PrincipalPermission, ou exigências, que estão disponíveis desde ASP.NET 1.0. Pode utilizar pedidos de autorização, preservando assim práticas bem estabelecidas, utilizando novas tecnologias, como WIF e ACS. Você pode baixar o tempo de execução WIF e SDK aqui:
Resumo dos Passos
Passo 1 – Criar uma aplicação web ASP.NET simples consciente de reclamações
Passo 2 - Configurar as reivindicações de funções na ACS
Passo 3 – Implementar verificações de funções numa aplicação web ASP.NET
Passo 4 – Implementar uma transformação de reclamações utilizando um gerente de crédito personalizado
Passo 5 – Teste o seu trabalho
Passo 1 – Criar uma aplicação web ASP.NET simples consciente de reclamações
Este passo mostra-lhe como criar uma aplicação web ASP.NET básica que será usada como base para a implementação do RBAC.
Para criar uma aplicação web de ASP.NET simples
Comece Visual Studio com a opção "Executar como administrador". Isto é necessário para a WIF.
Crie uma nova aplicação web ASP.NET vazia.
Adicione o formulário web aspx e, em seguida, dê-lhe um nome, por exemplo, padrão.aspx.
Passo 2 - Configurar as reivindicações de funções no ACS
Este passo mostra-lhe como configurar as reivindicações de funções no Portal de Gestão acs utilizando grupos de regras. Consulte como: Implementar a Lógica de Transformação token usando regras para uma passagem completa passo a passo.
Para configurar as reivindicações de funções no Portal de Gestão da ACS
Na página 'Aplicação do Partido de Edição' de Editar , desloque-se até à secção Grupos de Regras e, em seguida, clique no link do grupo pretendido. Certifique-se de que está selecionado.
Na página 'Grupo regra de edição ', desloque-se até à secção Regra e, em seguida, clique no link 'Adicionar Regra '.
Na página 'Adicionar Regra reclamação ', desloque-se para a secção de tipo de reclamação de saída , clique no botão de rádio tipo Select e, em seguida, escolha o seguinte tipo de reclamação.
https://schemas.microsoft.com/ws/2008/06/identity/claims/role
Na secção de valor de reclamação de saída , clique em Introduzir o valor e, em seguida, introduza o seguinte texto como um valor na caixa de texto:
UtilizadorOpcionalmente, (recomendado) adicione uma descrição e, em seguida, clique em Guardar.
Acaba de configurar a alegação da função do Utilizador que pode ser adicionada a qualquer token. O cenário pode ser diferente dependendo dos seus requisitos. Para obter mais informações sobre a configuração de regras mais complexas, consulte Como: Implementar a Lógica de Transformação token usando regras.
Passo 3 – Implementar verificações de funções numa aplicação web ASP.NET
Este passo mostra como implementar o RBAC.
Para implementar o RBAC numa página web ASP.NET
Adicione uma referência à montagem Microsoft.IdentityModel.
Abra o código por trás do predefinido.aspx.cs.
Adicione o seguinte, usando declarações.
using System.Security.Permissions; using System.Threading; using Microsoft.IdentityModel.Claims; using System.Security;
Decore o Page_Load manipulador de eventos com a seguinte exigência de segurança. Este atributo verificará se o utilizador atual está na função de Utilizador. Se não, uma exceção será lançada.
[PrincipalPermission(SecurityAction.Demand, Role = "User")]
Adicione o seguinte código ao corpo de Page_Load manipulador de eventos. Isto é exatamente o mesmo que a exigência expressa no código.
PrincipalPermission p = new PrincipalPermission(null, "User"); p.Demand();
Adicione o seguinte código ao corpo de Page_Load evento. Ao contrário do código anterior, este código não lança uma exceção. Em vez disso, a IsInRole devolve Boolean indicando se o utilizador atual tem a função especificada.
if (!User.IsInRole("User")) throw new SecurityException("Access is denied.");
O código preenchido deve 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."); } } }
Passo 4 – Implementar uma transformação de reclamações utilizando um gerente de crédito personalizado
Este passo é opcional. Este passo mostra como transformar as reclamações utilizando o ClaimsAuthenticationManager, que faz parte do oleoduto WIF que funciona no contexto da aplicação ASP.NET, ao contrário das regras de transformação de sinistros que funcionam em ACS, conforme descrito no Passo 2 – Configure Role Claims no ACS.
Implementar a transformação de sinistros usando um gerente personalizado da ClaimsAuthentication
Adicione o projeto class Library à Solução Visual Studio e, em seguida, dê-lhe um nome, por exemplo, MyClaimsTransformationModule.
Adicione uma referência à montagem Microsoft.IdentityModel .
Adicione uma referência à montagem System.IdentityModel .
Crie uma nova classe e, em seguida, dê-lhe um nome, por exemplo, ClaimsTransformationModule.
Adicione as seguintes declarações à classe.
using Microsoft.IdentityModel.Claims; using System.Security.Principal;
Derivar a classe do tipo ClaimsAuthenticationManager .
Anular o seu método Authenticate (é aqui que a transformação de sinistros ocorrerá). O seu código para o método Authenticate pode basear-se 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;
Mude para a aplicação ASP.NET e configuure o seu gerente de reclamações personalizados na sua web.config.
<microsoft.identityModel> <service> <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
Certifique-se de que o novo conjunto que criou pode ser encontrado pela aplicação; a forma mais simples é colocá-la na pasta do caixote do lixo da aplicação.
Passo 5 – Teste o seu trabalho
Este passo mostra como validar que a solução funciona. Para testar a sua solução, prima o botão F5. A sua aplicação web ASP.NET deve ser executada no modo de depuração (pode adicionar pontos de rutura para verificar a execução do código dentro de Visual Studio). Em primeiro lugar, deve ser levado para a página de autenticação do fornecedor de identidade que foi configurado para a federação. Após a conclusão da autenticação, deverá ser redirecionado de volta para a página Predefinida.aspx sem que seja lançada uma exceção, o que significa que todas as exigências de segurança para a função de Utilizador foram satisfeitas.