ASP.NET Coluna de Voz de Suporte
Introdução
Bem-vindo à coluna Voz de Suporte do Microsoft ASP.NET! Sou Nilay B. Shah com a ASP.NET equipa de suporte para programadores. Trabalho com ASP.NET apoio há mais de um ano e meio. A Autenticação de Formulários é realmente uma funcionalidade de autenticação interessante. Este artigo aborda alguns problemas que os utilizadores consideraram confusos com a autenticação de formulários, como a relação do pedido de autenticação de formulários e o cookie de autenticação de formulários e as respetivas definições relevantes. Gostaria de agradecer a Jerry Orman, líder técnico da equipa de apoio ASP.NET, pela sua incrível ajuda!
Pessoas por vezes questionam-se sobre os "bilhetes" e os "cookies" de autenticação de formulários porque estão intimamente relacionados.
Deparei-me com perguntas como estas: alguém pode explicar a diferença entre a expiração do cookie e a expiração do pedido? Quando o cookie expirar, o utilizador será redirecionado para a página de início de sessão. O que acontece quando o pedido expira? Também fará com que o cookie expire? O que é que o SlidingUpdate realmente atualiza?
Neste artigo, vou concentrar-me nestes dois aspetos da Autenticação de Formulários para responder às seguintes perguntas:
-
O que é o pedido de autenticação de formulários e o cookie de autenticação de formulários? Como estão relacionados?
-
Qual é a função de um pedido de suporte na Autenticação de Formulários?
-
Como estão relacionados com a expiração de cookies e a expiração de pedidos?
-
Como funciona a expiração deslizante no contexto do pedido de autenticação de formulários e do cookie de autenticação de formulários?
-
Onde pode ser definida a propriedade de tempo limite do cookie de autenticação de formulários e o pedido de autenticação de formulários?
-
Cenário de problema: a autenticação de formulários pode exceder o limite de tempo antes do valor do atributo de tempo limite definido no ficheiro de configuração
O que é o pedido de autenticação de formulários e o cookie de autenticação de formulários? Como estão relacionados?
O cookie de autenticação de formulários não passa de um contentor para o pedido de autenticação de formulários. O pedido é transmitido como o valor do cookie de autenticação de formulários com cada pedido e é utilizado pela autenticação de formulários, no servidor, para identificar um utilizador autenticado.
No entanto, se optarmos por utilizar a autenticação de formulários sem cookies, a permissão será transmitida no URL num formato encriptado. A autenticação de formulários sem cookies é utilizada porque, por vezes, os browsers cliente bloqueiam cookies. Esta funcionalidade é introduzida no Microsoft .NET Framework 2.0.
Para obter mais informações, visite o seguinte Web site da Microsoft Developer Network (MSDN):
Qual é a função de um pedido de suporte na Autenticação de Formulários?
O pedido de autenticação de formulários é utilizado para indicar à aplicação ASP.NET quem é. Assim, a permissão é um bloco modular da segurança da Autenticação de Formulários.
A permissão é encriptada e assinada com o <machineKey> elemento de configuração do ficheiro de Machine.config do servidor. ASP.NET 2.0 utiliza a desencriptaçãoKey e o novo atributo de desencriptação do elemento <machineKey> para encriptar permissões de autenticação de formulários. O atributo de desencriptação permite-lhe especificar o algoritmo de encriptação a utilizar. ASP.NET 1.1 e 1.0 utilizam a encriptação 3DES, o que não é configurável. A adulteração do valor da permissão é determinada por uma falha ao desencriptar a permissão no servidor. Como resultado, o utilizador será redirecionado para a página de início de sessão.
Se a aplicação for implementada num Web farm, tem de se certificar de que os ficheiros de configuração em cada servidor partilham o mesmo valor para os atributos validationKey e decryptionKey no <machineKey> etiqueta, que são utilizados para hashing e desencriptação da permissão, respetivamente. Tem de o fazer porque não pode garantir que servidor irá processar pedidos sucessivos. Para obter mais informações sobre a encriptação FormsAuthenticationTicket e as considerações de implementação do Web farm, visite o seguinte Web site da MSDN:
http://msdn2.microsoft.com/en-us/library/ms998288.aspx
As permissões de autenticação de formulários podem ser geradas manualmente através da classe FormsAuthenticationTicket. Para obter mais informações, visite o seguinte Web site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx
Como estão relacionados com a expiração de cookies e a expiração de pedidos?
No caso de cookie não persistente, se o pedido expirar, o cookie também expirará e o utilizador será redirecionado para a página de início de sessão. Por outro lado, se o pedido estiver marcado como persistente, em que o cookie é armazenado na caixa de cliente, os browsers podem utilizar o mesmo cookie de autenticação para iniciar sessão no Web site a qualquer altura. No entanto, podemos utilizar o método FormsAuthentication.SignOut para eliminar cookies persistentes ou não persistentes explicitamente.
Para obter mais informações sobre o método FormsAuthentication.SignOut, visite o seguinte Web site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication.signout.aspxCom a autenticação de formulários sem cookies, se o browser estiver fechado, o pedido será perdido e será gerado um novo pedido de suporte no próximo pedido.
Como funciona a expiração deslizante no contexto do pedido de autenticação de formulários e do cookie de autenticação de formulários?
A expiração deslizante funciona exatamente da mesma forma!
Vejamos um exemplo: se a página de início de sessão for acedida às 17:00 00:00, deverá expirar às 17:10 00:00 se o atributo de tempo limite for 10 e o atributo slidingExpiration estiver definido como VERDADEIRO. Agora, se alguma página Web for novamente consultada às 17:05 20:00, os cookies e o período de tempo limite do pedido serão repostos para 17:15 20:00:00.
Nota Se a página Web for acedida antes de passar metade do tempo de expiração, o tempo de expiração da permissão não será reposto. Por exemplo, se uma página Web for acedida novamente às 17:04 00:00, os cookies e o período de tempo limite da permissão não serão repostos.
Para obter mais informações, visite o seguinte Web site da MSDN:
http://msdn2.microsoft.com/en-us/library/1d3t3c61(vs.71).aspx
Onde pode ser definido o valor de tempo limite do pedido de autenticação de formulários e do cookie de autenticação de formulários?
A única definição que pode efetuar é no ficheiro de Web.config ou no ficheiro de Machine.config, na etiqueta> formulários <. Esta alteração determinará o período de tempo limite da autenticação de formulários no contexto de um pedido de suporte ou cookie, a menos que o pedido seja gerado manualmente.
<!--
Atributos de formulários:
name="[nome do cookie]" - Define o nome do cookie utilizado para a Autenticação de Formulários.
loginUrl="[url]" - Define o URL para redirecionar o cliente para para a autenticação.
protection="[All|Nenhum|Encriptação|Validação]" - Define o modo de proteção dos dados no cookie.
timeout="[minutes]" - Define a duração do tempo para que o cookie seja válido (repor em cada pedido).
path="/" - Define o caminho para o cookie.
requireSSL="[true|false]" - O cookie de autenticação de formulários deve ser enviado apenas através de SSL?
slidingExpiration="[true|false]" - O cookie e o pedido de autenticação dos formulários devem ser reeditados se estiverem prestes a expirar?
--> Para obter mais informações, visite o seguinte Web site da MSDN:
http://msdn2.microsoft.com/en-us/library/1d3t3c61.aspxSe a permissão for gerada manualmente com a classe FormsAuthenticationTicket, o tempo limite pode ser definido através do atributo Expiração. Este valor substituirá o valor do atributo de tempo limite especificado nos ficheiros de configuração.
Para obter mais informações sobre os membros do FormsAuthenticationTicket, visite o seguinte Web site da MSDN:
http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket_members.aspx
Cenário de problema: a autenticação de formulários pode exceder o limite de tempo antes do valor do atributo de tempo limite definido no ficheiro de configuração
Se o pedido de autenticação de formulários for gerado manualmente, a propriedade de tempo limite da permissão substituirá o valor definido no ficheiro de configuração. Por conseguinte, se esse valor for inferior ao valor no ficheiro de configuração, o pedido de autenticação de formulários expirará antes do valor do atributo de tempo limite do ficheiro de configuração e vice-versa. Por exemplo, vamos supor que o <formulários>atributo de tempo limite está definido como 30 no ficheiro Web.config e que o valor expiração da permissão está definido como 20 minutos. Neste caso, o pedido de autenticação de formulários expirará após 20 minutos e o utilizador terá de iniciar sessão novamente depois disso.
Ligações relacionadas
910439 Resolver Problemas de Autenticação de Formulários
301240 Como implementar a autenticação baseada em formulários na sua aplicação ASP.NET com o .NET C#
Espero que tenha considerado estas informações úteis para facilitar alguma da confusão envolvida com ASP.NET formulários de autenticação e cookies. Lembre-se de que as colunas Voz de Suporte são para si.