Noções básicas sobre o tíquete de autenticação de formulários e o Cookie


Coluna de voz de suporte do ASP.NET


Noções básicas sobre o tíquete de autenticação de formulários e o Cookie

Para personalizar esta coluna às suas necessidades, gostaríamos de convidá-lo a enviar suas idéias sobre tópicos que te interessam e problemas que você desejaria ver abordados em futuros artigos da Base de Conhecimento e nas colunas de Suporte. Você pode enviar suas ideias e comentários usando o formulário Pedir para ele . Há também um link para o formulário na parte inferior desta coluna.

Introdução

Bem-vindo à coluna voz de suporte do Microsoft ASP.NET! Eu sou Nilay B. Shah da equipe de suporte aos desenvolvedores do ASP.NET. Venho trabalhando com suporte à ASP.NET há mais de um ano e meio. Autenticação de formulários é realmente um recurso de autenticação interessante. Este artigo aborda alguns problemas que os usuários descobriram confusos com autenticação de formulários, como a relação entre o tíquete de autenticação de formulários e o cookie de autenticação de formulários e suas configurações relevantes. Eu gostaria de agradecer a Jerry Orman, líder técnico da equipe de suporte do ASP.NET, por sua ajuda incrível!

As pessoas às vezes se questionam sobre permissões"autenticação de formulários" e "cookies" porque elas estão intimamente relacionadas. Eu já me deparei com perguntas como essas: qualquer pessoa pode explicar a diferença entre a expiração do cookie e a expiração da permissão? Quando o cookie expirar, o usuário será redirecionado para a página de logon. O que acontece quando a concessão expira? Ele também fará com que o cookie expire? O que SlidingUpdate realmente atualiza?

Falarei sobre esses dois aspectos da autenticação de formulários neste artigo para responder às seguintes perguntas:
  • O que é o tíquete de autenticação de formulários e o cookie de autenticação forms? Como eles estão relacionados?
  • Qual é a função de um tíquete de autenticação de formulários?
  • Como são relacionados a expiração do cookie e a expiração da permissão?
  • Como trabalho de expiração sliding no contexto do tíquete de autenticação de formulários e o cookie de autenticação de formulários?
  • Onde pode definir a propriedade de tempo limite do tíquete de autenticação de formulários e o cookie de autenticação de formulários?
  • Cenário de problema: A autenticação de formulários pode expirar antes do valor de atributo de tempo limite é definido no arquivo de configuração

O que é o tíquete de autenticação de formulários e o cookie de autenticação forms? Como eles estão relacionados?

Cookie de autenticação Forms não é nada mas o recipiente para o tíquete de autenticação de formulários. A permissão é passada como o valor do cookie de autenticação forms com cada solicitação e é usada pela autenticação de formulários, no servidor, para identificar um usuário autenticado.

No entanto, se optarmos por usar autenticação de formulários cookieless, a permissão será passada na URL no formato criptografado. Autenticação de formulários cookieless é usada porque, às vezes, os navegadores cliente bloqueiam cookies. Este recurso é introduzido no Microsoft.NET Framework 2.0.

Para obter mais informações, visite o seguinte site da Microsoft Developer Network (MSDN):

Qual é a função de um tíquete de autenticação de formulários?

O tíquete de autenticação de formulários é usado para instruir o aplicativo ASP.NET que você está. Assim, o tíquete é o bloco de construção de segurança da autenticação de formulários.

A permissão é criptografada e assinada usando o elemento de configuração < machineKey > do arquivo de Machine. config do servidor. O ASP.NET 2.0 usa o decryptionKey e o novo atributo de descriptografia do elemento < machineKey > para criptografar tíquetes de autenticação de formulários. O atributo de descriptografia permite que você especifique o algoritmo de criptografia a ser usado. O ASP.NET 1.1 e 1.0 usar a criptografia 3DES, que não é configurável. Violação com o valor de tíquete é determinado por uma falha de descriptografar o tíquete do servidor. Como resultado, o usuário será redirecionado para a página de logon.


Se o aplicativo for implantado em um Web farm, você deve garantir que os arquivos de configuração em cada servidor compartilham o mesmo valor para os atributos validationKey e decryptionKey na marca < machineKey > , que são usados para hash e decodificação do tíquete de respectivamente. Você deve fazer isso porque você não pode garantir que servidor irá tratar solicitações sucessivas. Para obter mais informações sobre criptografia FormsAuthenticationTicket e considerações de implantação de farm da Web, visite o seguinte site da MSDN:Um passeio por meio dos métodos para gerar chaves manualmente pode ser encontrado nos seguintes artigos da Base de Conhecimento Microsoft:
312906 como criar chaves usando o Visual C# .NET para uso em autenticação de formulários

313091 como criar chaves usando o Visual Basic .NET para uso em autenticação de formulários

Tíquetes de autenticação de formulários podem ser gerados manualmente, usando a classe FormsAuthenticationTicket . Para obter mais informações, visite o seguinte site da MSDN:

Como são relacionados a expiração do cookie e a expiração da permissão?

No caso de cookie não-persistente, se a permissão for expirada, cookie também irá expirar e o usuário será redirecionado para a página de logon. No outro lado, se a permissão estiver marcada como persistente, onde o cookie é armazenado na caixa cliente, navegadores podem usar o mesmo cookie de autenticação para fazer logon no site da Web qualquer tempo. No entanto, podemos usar o método FormsAuthentication.SignOut para excluir cookies persistentes ou não-persistentes explicitamente.

Para obter mais informações sobre o método FormsAuthentication.SignOut , visite o seguinte site da MSDN:Com autenticação de formulários cookieless, se o navegador for fechado, o tíquete é perdido e será gerado um novo tíquete na próxima solicitação.

Como trabalho de expiração sliding no contexto do tíquete de autenticação de formulários e o cookie de autenticação de formulários?

A expiração deslizante funciona exatamente da mesma maneira!

Vamos pegar um exemplo: se a página de logon é acessada às 5:00 00:00:00 PM, ele deve expirar às 5:10 00:00:00 PM se o atributo timeout é 10 e o atributo slidingExpiration é definido como TRUE. Agora, se qualquer página da Web é apresentada novamente em 5:05 00:00:00 PM, os cookies e o período de tempo limite do tíquete serão redefinidas como 5:15 00:00:00 PM.

Observação: Se a página da Web for acessada antes de metade do tempo de expiração passar, o tempo de expiração de ticket não será redefinido. Exemplo de primeiro plano, se qualquer página da Web for acessada novamente às 5:04 00:00:00 PM, os cookies e o período de tempo limite do tíquete não serão redefinidos.

Para obter mais informações, visite o seguinte site da MSDN:

Onde o valor de tempo limite do tíquete de autenticação de formulários e o cookie de autenticação de formulários pode ser configurado?

É a única configuração que você pode fazer no arquivo Web. config ou o arquivo Machine. config, na marca < forms > . Esta alteração determinará o período de tempo limite de autenticação de formulários no contexto de um tíquete ou cookie a menos que a permissão é gerada manualmente.

<!--forms Attributes: 
name="[cookie name]" - Sets the name of the cookie used for Forms Authentication.
loginUrl="[url]" - Sets the URL to redirect client to for authentication.
protection="[All|None|Encryption|Validation]" - Sets the protection mode for data in cookie.
timeout="[minutes]" - Sets the duration of time for cookie to be valid (reset on each request).
path="/" - Sets the path for the cookie.
requireSSL="[true|false]" - Should the forms authentication cookie be sent only over SSL?
slidingExpiration="[true|false]" - Should the forms authentication cookie and ticket be reissued if they are about to expire?
-->
Para obter mais informações, visite o seguinte site da MSDN:Se a permissão for gerada manualmente, usando a classe FormsAuthenticationTicket , o tempo limite pode ser definido por meio do atributo de expiração . Esse valor substituirá o valor de atributo de tempo limite especificado nos arquivos de configuração.

Para obter mais informações sobre membros FormsAuthenticationTicket , visite o seguinte site da MSDN:

Cenário de problema: A autenticação de formulários pode expirar antes do valor de atributo de tempo limite é definido no arquivo de configuração

Se o tíquete de autenticação de formulários é gerado manualmente, a propriedade de tempo limite do tíquete de substituirá o valor definido no arquivo de configuração. Portanto, se esse valor for menor que o valor no arquivo de configuração, os formulários de tíquete de autenticação irá expirar antes que o arquivo de configuração tempo limite de atributo, valor e vice-versa. Por exemplo, vamos supor que o atributo detempo limite de < forms >é definido como 30 no arquivo Web. config e o valor de expiração do tíquete de é definido para 20 minutos. Nesse caso, o tíquete de autenticação de formulários irá expirar após 20 minutos e o usuário terá que fazer logon novamente depois disso.

Links relacionados

910439 solucionar problemas de autenticação de formulários

Solução de problemas do 891032 ASP.NET

301240 como implementar autenticação com base em formulários no seu aplicativo ASP.NET usando C# .NET

308157 como implementar autenticação com base em formulários no seu aplicativo ASP.NET usando o Visual Basic .NET

Espero que você encontrou informações úteis para facilitar alguns confusão envolvido com o cookie e o tíquete de autenticação de formulários ASP.NET. Lembre-se de que as colunas de voz de suporte são para você! Como sempre, fique à vontade para enviar ideias sobre tópicos desejado no futuro abordada colunas ou na Base de Conhecimento da Microsoft usando o
Formulário de Pedir para ele .