Formas autenticação não permite papéis autenticação. Este artigo explica como implementá-lo.
Formas básicas autenticação
Autenticação baseada em formulários ASP.NET é bastante útil. Ao invés de escrever os nossos próprios processos de autenticação, podemos simplesmente mudar o modo como web.config abaixo system.web ....
<authentication mode="Forms"/>
<formulários
name = "MyWebsiteCookieName"
loginUrl = "/ Login.aspx"
= proteção "Todos"
timeout = "180"
/>
</ autenticação>
- O modo é configurado para autenticação de formulários.
- Um URL é fornecida para que saiba onde ASP.NET para redirecionar as pessoas que precisam de log polegadas
- Um tempo limite é especificado em minutos. Este é o "tempo desde a última solicitação" não o "tempo desde login." Se um login é indicado para ser persistente (descrito mais tarde) isso é ignorado.
- Um método é indicado para a proteção do cookie.
Seguinte eu quis especificar uma pasta para a qual o acesso é restrito a pessoas que já fez o acesso Para isso me entrou o seguinte código no arquivo web.config (<configuration> abaixo) ...
<Location path="Members">
<system.web>
<authorization>
<deny users="?"/>
</ autorização>
</ system.web>
</ local>
Isto indica que o caminho ASP.NET "/ colegas" (o chumbo / semper está implícita) deve negar o acesso a todos os usuários desconhecidos. Quando alguém tenta aceder a uma página em / Os membros vez eles vão ser redirecionado para o URL que você login.aspx especificado no web.config.
Login.aspx Este formulário deve perguntar por qualquer credenciais que você quer (nome de usuário e senha, por exemplo) e valida-las. Logo que tenham sido validados, só é preciso executar o seguinte código para ter o usuário de volta redirecionado para a página foram inicialmente tentando acesso ...
System.Web.Security.FormsAuthentication.RedirectFromLoginPage (UserId, false);
A UserID é o identificador único para o atual usuário (username), eo segundo parâmetro indica se este Boolean deveria ser um cookie persistente de segurança, ou uma estadia temporária (com validade desde a última página pedido), conforme mencionado anteriormente.
Papéis
Foi nesse momento que eu percebi que precisava de um especial / pasta Admin. Essa pasta deve apenas ser acessados pelos administradores, e não os usuários normais. Por isso eu obviamente necessária papéis no web.config (<configuration> abaixo) gosta assim. ..
<Location path="Admin">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</ autorização>
</ system.web>
</ local>
Nota: A fim de permitir que o / negar é importante. Se você negar * (todos os usuários) antes de permitir que a Administração papel, ninguém terá acesso à pasta.
O problema aqui é que embora você só obter papéis quando a autenticação mode = "Windows". Para este modo cada usuário precisa de uma conta de utilizador válido para o Windows no servidor. Não é uma boa solução.
Felizmente eu encontrei um artigo interessante na MSDN. Quando você autenticar o usuário na forma Login.aspx, então você deve trabalhar para qual o usuário pertence aos papéis ...
if (author.IsAdministrator)
papéis = new string [] ( "Admin", "Estado");
diferente
papéis = new string [] ( "Estado");/ / 1 hora deslizamento termo tempo
Cache.Add (author.UniqueId, papéis, null, DateTime.MaxValue,
TimeSpan.FromHours (1), CacheItemPriority.BelowNormal, null);
Tenho criada uma string array exploração dos papéis que o usuário possua. Estes são então armazenadas no Application [] cobrança por motivos de desempenho, caso contrário, teríamos de ter um PO acesso de cada vez que pretendia obter os papéis do usuário atual.
Agora, porque não tem autenticação de formulários conceito de Roles esses papéis nunca vai entrar em vigor o cookie do usuário. Portanto, temos de determinar o que esses papéis estão cada vez que uma autenticação é executado. Para isso precisamos de ir para o arquivo Global.asax .. .
protegidos void Application_AuthenticateRequest (
Object sender, EventArgs e)
(
if (HttpContext.Current.User! = null)
(
if (HttpContext.Current.User.Identity.AuthenticationType! = "Formulários")
throw novo Exceção ( "Só authentication formas é apoiado, e não" +
HttpContext.Current.User.Identity.AuthenticationType);System.Security.Principal.IIdentity userid =
HttpContext.Current.User.Identity;/ / Nós temos alguns papéis para recuperar? Em caso afirmativo, substitua o objeto usuário
if (Application [userId.Name]! = null)
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal (
UserId, (string []) Cache [userId.Name]
);
) / / user! = null
)
Esta rotina verifica se o usuário atual! = Null. Isto significa que a página está em um local protegido. Se este for o caso, então nós usamos o UserId como a chave para o Cache [] coleta de encontrar uma lista de funções. Se estas Existem papéis então vamos transferir o atual usuário com um objeto que criamos nós mesmos, um objeto que detém uma lista de papéis.
Conclusão
Segurança é baseada papel muito útil em aplicações web. Com um simples poucas linhas de código que é possível implementar segurança baseada papel para usuários sem um login válido para o Windows.

Delicious
Digg
Google
Yahoo