Resolução de problemas de autenticação de formulários


Coluna de voz de suporte do ASP .NET


Resolução de problemas de autenticação de formulários

Para personalizar esta coluna às suas necessidades, pretendemos convidá-lo para apresentar as suas ideias sobre os tópicos que interessam problemas que pretende ver e corrigida no futuro colunas de voz de suporte e artigos da Base de dados de conhecimento. Pode submeter as ideias e comentários utilizando o formulário Pedir para-lo . Existe também uma hiperligação para o formulário na parte inferior desta coluna.
Bem-vindo à coluna de voz de suporte ASP.NET! O meu nome estiver Jerry Orman. Ter sido com a Microsoft 5 anos e ter gasto a maior parte do meu centrado sobre tecnologias relacionadas com a Web tal como o Microsoft FrontPage e novas tecnologias Microsoft SharePoint. Ter gasto a ano passado a trabalhar com o Microsoft ASP.NET como um engenheiro de suporte. Este mês na coluna voz de suporte, vou explicam como resolver problemas relacionados com autenticação por formulários no Microsoft ASP.NET.

Resolução de problemas de autenticação de formulários


Quando utiliza a autenticação de formulários numa aplicação do ASP.NET, poderá ser necessário para resolver um problema que ocorre quando o utilizador aleatoriamente é redireccionado para a página de início de sessão. Num mundo ideal, este problema seria ocorrer de uma forma que poderia permitir que é fácil anexar um depurador e capturar o problema. Em ambientes de produção, no entanto, isto raramente é o caso. Para resolver um problema aleatório deste género, é necessário registar informações relacionadas com o problema para que pode reduzir a causa de raiz.

Nesta coluna, vamos brevemente abordar o conceito de autenticação de formulários. Em seguida, vamos nas quais os cenários de conduzir a um utilizador que está a ser redireccionado para a página de início de sessão e como capturar dados relevantes para isolar o problema. Vamos também abordar como implementar uma interface IHttpModule para registar as informações de autenticação de formulários.

Descrição geral da autenticação de formulários

Quando autentica um utilizador a um Web site utilizando a autenticação de formulários, o servidor cria um cookie. O valor do cookie é uma permissão de autenticação de formulários encriptados. O cookie é transmitido para o servidor em cada pedido à aplicação e a classe FormsAuthenticationModule desencripta o valor de cookie e determina se o utilizador é válido ou não.

Por predefinição, a classe FormsAuthenticationModule é adicionada no ficheiro Machine. config. A classe FormsAuthenticationModule gere o processo de autenticação por formulários.

Segue-se uma entrada do ficheiro Machine. config:
<httpModule>     …other modules…
<add name="FormsAuthentication"
type="System.Web.Security.FormsAuthenticationModule" />
…other modules…
</httpModule>

O tráfego HTTP geral para a autenticação utilizando a autenticação por formulários é semelhante à seguinte:
  1. O cliente envia um HTTP GET para default. aspx. Não é enviado nenhum cookie de autenticação de formulários.
  2. O servidor envia uma resposta 302 (redireccionamento) a Login.aspx.
  3. O cliente envia uma solicitação POST HTTP para Login.aspx. Inclui as informações de início de sessão.
  4. O servidor envia uma resposta 302 (redireccionamento) para default. aspx. O cookie de autenticação de formulários está incluído.
  5. O cliente envia um HTTP GET para default. aspx. Isto inclui o cookie de autenticação de formulários.
Para mais informações sobre como implementar e utilizar autenticação de formulários, visite os seguintes Web sites da MSDN:Para mais informações sobre a partilha de cookies de autenticação de formulários, visite o seguinte site da Web do ASP.NET:

Razões que um utilizador poderá ser redireccionado para a página de início de sessão

Perde-se o cookie de autenticação de formulários

Cenário 1

Neste cenário, um utilizador inicia sessão no Web site. Em algum momento, o cliente envia um pedido para o servidor e
Classe de FormsAuthenticationModule não recebe o cookie. Pode determinar se um pedido de utilizador não contém o cookie activando o cookie de sessão no Microsoft Internet Information Services (IIS). Para tal, siga estes passos:
  1. Abra a consola de gestão da Microsoft (MMC) do IIS.
  2. Com o botão direito do Web site e, em seguida, clique em
    Propriedades.
  3. Clique no separador Web Site e, em seguida, clique em Activar registo.
  4. Certifique-se de que o formato de registo é o Formato de ficheiro de registo expandido W3C.
  5. Clique em Propriedades.
  6. Clique no separador Avançadas e, em seguida, clique em
    Propriedades expandidas.
  7. Em Extended Properties, clique para seleccionar a caixa de verificação de Cookie(cs(Cookie)) e Referenciador (cs(Referer)) caixa de verificação.
Depois deste problema ocorre, determine o cliente que tinha o problema e o endereço IP desse cliente. Filtrar o registo do IIS no endereço IP desse cliente e ver a coluna <cookie>.

Nota Pode utilizar o analisador de registo para analisar registos do IIS. Para transferir o Parser de registo, visite o seguinte Web site da Microsoft:Depois de ter a lista de pedidos de utilizador específica, procure os pedidos para a página de início de sessão. Sabe foram redireccionados para esta página e pretender ver os pedidos antes do redireccionamento. Se visualizar algo semelhante à seguinte, o cliente quer não enviou o cookie ou o cookie foi removido da rede entre o cliente e servidor.

Este é o primeiro início de sessão.
MétodoPáginaRespostaCookies
OBTER/Default.aspx302 (redireccionamento)Sem Cookies
OBTER/Login.aspx200 (êxito)Sem Cookies
REGISTAR/Login.aspx302 (redireccionamento)Sem Cookies
OBTER/Default.aspx200 (êxito).ASPXAUTH
OBTER/SomePage.aspx302 (redireccionamento)N. Cookie ASPXAUTH
Estes são outros pedidos, seguidos de um pedido para uma página no site sem o. Cookie ASPXAUTH.
MétodoPáginaRespostaCookies
OBTER/SomePage.aspx302 (redireccionamento)N. Cookie ASPXAUTH
OBTER/Login.aspx200 (êxito)N. Cookie ASPXAUTH
REGISTAR/Login.aspx302 (redireccionamento)N. Cookie ASPXAUTH
OBTER/SomePage.aspx200 (êxito).ASPXAUTH

Nota O primeiro pedido de que o utilizador não é susceptível de ter um cookie de autenticação de formulários, a menos que está a criar um cookie persistente. O registo do IIS só irá mostrar os cookies que foram recebidos no pedido. O primeiro pedido para que o cookie de autenticação de formulários serão a pedido após uma tentativa de início de sessão com êxito.
Cenário 2

O cookie de autenticação de formulários pode também ser perdido quando for excedido o limite de cookies do cliente. No Microsoft Internet Explorer, existe um limite de 20 cookies. Depois do cookie de 20 é criado no cliente, os cookies anteriores são removidos da colecção do cliente. Se o. Cookie ASPXAUTH é removido, o utilizador será redireccionado para a página de início de sessão quando o próximo pedido é processado.

Pode resolver estes dois cenários da mesma forma. Observe o pedido antes do redireccionamento para a página de início de sessão. Se o pedido a esta página gera cookies, isto é algo para investigar.

Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Base de Dados de Conhecimento Microsoft

306070 número e os limites de tamanho de um cookie no Internet Explorer


Pode utilizar Fiddler para ver os cabeçalhos HTTP que são enviados para o cliente. Depois de capturar o tráfego, faça duplo clique sobre um pedido e, em seguida, clique em cabeçalhos para ver o cabeçalho do Cookie do conjunto. Se analisar um início de sessão com êxito, verá o cabeçalho de Set-Cookie na resposta de um início de sessão com êxito.

Para transferir o Fiddler, visite o seguinte site da Web de Fiddler:
Cenário 3

Depois do pedido deixa o cliente, existem várias camadas que podem afectar os pacotes que estão a ser enviados. Para determinar se um dispositivo de rede está a remover o cookie, tem de capturar um rastreio de rede no cliente e o servidor e, em seguida, procure no corpo do pedido para o cookie. Pretende ver o pedido do cliente para se certificar de que o cookie foi enviado e verificar o rastreio de servidor para se certificar de que o servidor recebeu o cookie.

Pedido de cliente

Este é um pedido GET depois do utilizador foi autenticado. As informações de permissão de autenticação de formulários são destacadas a azul. Confirma que as informações do cookie deixaram o cliente. Quando utilizar uma ferramenta de captura de rede, tal como Netmon, verá o tráfego que entrou efectivamente através da placa.
47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local68 6f 73 74 2f 46 6f 72-6d 73 41 75 74 68 4c 6f   host/FormsAuthLo
67 54 65 73 74 2f 57 65-62 46 6f 72 6d 31 2e 61 gTest/WebForm1.a
73 70 78 20 48 54 54 50-2f 31 2e 31 0d 0a 41 63 spx HTTP/1.1..Ac
63 65 70 74 3a 20 69 6d-61 67 65 2f 67 69 66 2c cept: image/gif,
…Other headers of the GET request…
63 68 65 0d 0a 43 6f 6f-6b 69 65 3a 20 2e 41 53 che..Cookie: .AS
50 58 41 55 54 48 3d 33-43 45 46 39 42 39 41 30 PXAUTH=3CEF9B9A0
43 33 37 41 44 46 36 33-45 36 42 44 33 37 42 36 C37ADF63E6BD37B6
39 43 44 41 32 35 30 30-30 46 38 30 37 32 38 46 9CDA25000F80728F
35 31 43 39 35 36 36 44-31 34 43 35 34 31 34 35 51C9566D14C54145
38 31 43 39 33 45 32 41-30 31 44 44 43 44 45 46 81C93E2A01DDCDEF
32 34 41 31 37 34 32 39-34 31 30 43 30 39 37 34 24A17429410C0974
42 33 45 43 42 30 36 34-32 32 38 45 33 35 33 39 B3ECB064228E3539
39 41 38 32 32 42 33 42-39 33 36 44 46 30 38 46 9A822B3B936DF08F
42 41 42 44 33 45 31 30-32 44 30 30 32 31 30 43 BABD3E102D00210C
32 45 31 33 39 38 30 37-39 42 32 33 35 32 39 46 2E1398079B23529F
34 46 35 44 37 34 41 3b-20 50 72 6f 66 69 6c 65 4F5D74A; Profile
3d 56 69 73 69 74 6f 72-49 64 3d 62 32 34 65 62 =VisitorId=b24eb

Pedido do lado do servidor

Quando observar o pedido que atingiu o servidor, pretende certificar-se de que o servidor recebeu as mesmas informações que o cliente enviado. Se o servidor não recebeu as mesmas informações, terá de investigar outros dispositivos na rede para determinar onde o cookie foi removido.

Nota Também foram instâncias dos filtros ISAPI remover cookies. Se confirmar que o servidor Web recebeu o cookie, mas o cookie não estiver listado nos registos do IIS, verifique os filtros ISAPI. Poderá ter de remover os filtros para ver se o problema foi resolvido.

O limite de tempo a permissão de autenticação de formulários

Outra causa comum para um utilizador a ser redireccionado é se a permissão de autenticação de formulários tiver expirado. A permissão de autenticação de formulários pode exceder o tempo limite de duas formas. O primeiro cenário ocorre se utilizar expiração absoluta. Com a expiração absoluta, a permissão de autenticação expira quando expira a hora de expiração. Por exemplo, pode define uma validade de 20 minutos, e um utilizador visitar o site às 14:00. O utilizador será redireccionado para a página de início de sessão se o utilizador visita o site após 2:20 PM.

Se utilizar a expiração ajustável, o cenário é um pouco mais complicado. O cookie e a permissão resultante são actualizadas se o utilizador visitar o site após a hora de expiração é metade expirou. Por exemplo, pode definir uma validade de 20 minutos utilizando expiração ajustável. Um utilizador visitar o site às 14:00 e o utilizador recebe um cookie que é definido para expirar às 14:20. A data de expiração é actualizada apenas se o utilizador visita o site após 2:10 PM. Se o utilizador visita o site às 14:09, o "ticket" não é actualizado uma vez que metade do tempo de expiração não passou. Se o utilizador, em seguida, aguarda 12 minutos, visitando o site às 14:21, o "ticket" irão expirar. O utilizador é redireccionado para a página de início de sessão.

Uma forma de abordagem este tipo de problema é registar as informações de cookie e permissão da autenticação de formulários. Desta forma, pode ver se o cookie foi recebido pelo IIS e quais são os valores. Pode fazê-lo escrevendo um HttpModulee, em seguida, ligar esse módulo a tubagem de pedido. Não terá de modificar o código da aplicação para obter as informações que necessárias.

A amostra anexada funciona no Microsoft .NET Framework 1.1 e o .NET Framework 2.0 e tiver comentários ao longo. A amostra inclui os seguintes ficheiros:Nota vai fornecer uma hiperligação de transferência para o código fornecido no ficheiro FormsAuthLogger.zip.

Posso vai destacar as áreas principais aqui:

Como sempre, sensação gratuita submeter ideias sobre os tópicos que pretende no futuro corrigida colunas ou na Knowledge Base utilizando o
Pedir para este formulário.