DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 910439 - Última revisão: quinta-feira, 30 de Maio de 2013 - Revisão: 2.0

 
Coluna de voz de suporte do ASP .NET

Para personalizar esta coluna às suas necessidades, pretendemos convidá-lo para submeter as suas ideias sobre tópicos que interessam problemas que pretende ver e corrigida no futuro artigos da Base de dados de conhecimento e de colunas de voz de suporte. Pode submeter ideias e comentários utilizando a Pedir (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) formulário. Existe também uma hiperligação para o formulário na parte inferior desta coluna.

Nesta página

Bem-vindo à coluna 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 tempo focalizada tecnologias relacionadas com a Web, tal como o Microsoft FrontPage e o novas tecnologias Microsoft SharePoint. Ter gasto a trabalhar com o último ano Microsoft ASP.NET como um engenheiro de suporte. Este mês na voz de suporte coluna, vou explicam como resolver problemas relacionados com autenticação por formulários na Microsoft ASP.NET.

Quando utiliza a autenticação por 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, isto problema ocorreria de uma forma que permite-lhe ligar facilmente um o depurador e capture o problema. Em ambientes de produção, no entanto, isto raramente é o incidente. Para resolver um problema aleatório deste género, é necessário registar informações relacionadas com o problema para que pode reduzir a raiz causa.

Nesta coluna, vamos brevemente abordar o Conceito de autenticação de formulários. Em seguida, vamos em quais os cenários conduzir a um utilizador a ser redireccionado para a página de início de sessão e como capturar dados que é relevante para isolar o problema. Vamos também abordar como implementar uma interface de 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 para a aplicação e a classe FormsAuthenticationModule desencripta o valor de cookie e Determina se o utilizador é válido ou não.

Por predefinição, o FormsAuthenticationModule classe é adicionado 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:
http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx (http://msdn2.microsoft.com/en-us/library/7t6b43z4.aspx)
aspx http://msdn2.microsoft.com/en-us/library/System.Web.Security.formsauthentication (vs.71) (http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthentication(vs.71).aspx)
aspx http://msdn2.microsoft.com/en-us/library/System.Web.Security.formsauthenticationticket (vs.71) (http://msdn2.microsoft.com/en-us/library/system.web.security.formsauthenticationticket(vs.71).aspx)
Para mais informações sobre a partilha de cookies de autenticação de formulários, visite o seguinte site da Web do ASP.NET:
http://quickstarts.asp.NET/QuickStartv20/ASPNET/doc/Security/formsauth.aspx (http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx)

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 o Classe de FormsAuthenticationModule não recebe o cookie. É possível determinar se um pedido de utilizador não contém o cookie ao activar cookies registo 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 emPropriedades.
  3. Faça clique sobre o Web Site separador e, em seguida, clique Activar Registo.
  4. Certifique-se de que é o formato de registo Ficheiro de registo de estendido do W3C Formato.
  5. Clique em Propriedades.
  6. Faça clique sobre o Avançadas separador e, em seguida, cliquePropriedades expandidas.
  7. Em Propriedades expandidas, clique para seleccionar o Cookie(CS(cookie)) caixa de verificação e o Referenciador (cs(Referer)) caixa de verificação.
Depois deste problema ocorre, determine qual o cliente tinha o problema e o endereço IP do cliente. Filtrar o registo do IIS no endereço IP do cliente, e ver o cookie> coluna.

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:
http://www.microsoft.com/downloads/details.aspx?FamilyId=890cd06b-abf8-4c25-91b2-f8d975cf8c07 (http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07)
Depois de ter a lista de pedidos nesse específico utilizador, procure os pedidos para a página de início de sessão. Sabe que estes foram redireccionados a esta página e se pretende ver pedidos antes da Ocorreu o redireccionamento. Se visualizar algo semelhante à seguinte, o cliente quer não enviou que o cookie ou o cookie foi removido da rede entre o cliente e servidor.

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

Nota O primeiro pedido esse utilizador não é susceptível de ter um formulários cookie de autenticação, a menos que está a criar um cookie persistente. O registo do IIS irá apenas mostrar-lhe os cookies que foram recebidas no pedido. O primeiro pedido para que o cookie de autenticação de formulários serão a pedido depois de um bem sucedida tentativa de início de sessão.
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, não existe um limite de 20 cookies. Depois do cookie vigésimo criado no cliente, cookies anteriores são removidos do cliente colecção. 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.

É possível resolver estes dois cenários da mesma forma. Procurar apenas a pedido antes do redireccionamento para a página de início de sessão. Se gerar o pedido a esta página cookies, este será algo para investigar.

Para mais informações, clique no número de artigo seguinte para visualizar o artigo na Microsoft Knowledge Base:
306070  (http://support.microsoft.com/kb/306070/ ) Limites de números e tamanho de um cookie no Internet Explorer

Pode utilizar Fiddler para ver os cabeçalhos de HTTP que são enviadas 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 lhe rastrear 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 Fiddler Web:
http://www.fiddlertool.com/fiddler/ (http://www.fiddlertool.com/fiddler/)
Cenário 3

Depois do pedido deixa o cliente, existem diversas camadas que podem afectar os pacotes que estão a ser enviados. Para determinar se é um dispositivo de rede 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 Observe o pedido do cliente para se certificar de que o cookie foi enviado e verifique o servidor rastreio para se certificar de que o servidor recebeu o cookie.

Pedido de cliente

Este é um pedido GET depois do utilizador foi autenticado. O informações de permissão de autenticação de formulários estão realçadas a azul. Isto confirma que as informações do cookie deixaram o cliente. Quando utiliza uma captura de rede ferramenta, tal como Netmon, verá o tráfego que efectivamente passou pela placa.
47 45 54 20 68 74 74 70-3a 2f 2f 6c 6f 63 61 6c   GET http://local
68 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 no rede para determinar onde o cookie foi removido.

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

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

A outra causa comum para um utilizador a ser redireccionado é se a autenticação de formulários permissão tiver expirado. A autenticação de formulários permissão 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 expirar quando a expira a hora de expiração. Por exemplo, pode definir 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, a cenário é um pouco mais complicado. O cookie e a permissão resultante são actualizado se o utilizador visita 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 dos a hora de expiração não passou. Se o utilizador, em seguida, aguarda 12 minutos, visitando o site às 21 14:, o "ticket" irão expirar. O utilizador é redireccionado para o início de sessão página.

É uma forma de aproximar este tipo de problema registar os formulários informações de cookie e a permissão de autenticação. 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 é necessário.

A amostra anexada funciona no Microsoft .NET Framework 1.1 e o .NET Framework 2.0 e tiver comentários em toda. A amostra inclui os seguintes ficheiros:
  • FormsAuthEvents.cs: A classe que implementa IHttpModule e une para o evento Application_BeginRequest .
  • FormsAuthInfo.cs: A classe que obtém o cookie e desencripta a permissão de autenticação de formulários. Também verifica a aplicação Ficheiro Web. config para se certificar de que a autenticação de formulários está activado.
  • FormsAuthConfig.cs: A classe que lê informações a partir de Ficheiro FormsAuthLogger.config.
  • Log.CS: O ficheiro que aceita um stringbuilder e escreve os valores para um ficheiro de registo.
  • FormsAuthLogger.config: O ficheiro XML que é de leitura pelo ficheiro Log.cs. Isto ficheiro tem de estar na pasta /bPara com a DLL incorporado. O ficheiro permite-lhe Configure o seguinte:
    • Filtrar por IP: pode filtrar a captura de dados por IP do cliente. Desta forma, pode iniciar sessão apenas os pedidos de um cliente que é conhecido como Reproduza o problema. Isto reduz o tamanho do registo.
    • Tipo de captura: Esta chave especifica onde guardar o ficheiro. A predefinição é a pasta de ficheiros temporários de ASP.NET, mas poderá guardá-lo em qualquer parte, desde que a conta de processo de trabalho tem a capacidade de escrever para o pasta.
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:
  1. Crie uma classe que implementa a interface IHttpModule .
    public class FormsAuthEvents : IHttpModule 
    {
    		…code…
    }
  2. Fio até o evento que pretende observar. Neste exemplo, Estamos a utilizar o evento Application_BeginRequest . Desta forma, podemos investigar cada pedido e determinar se tem o cookie de autenticação de formulários e inicia o FormsAuthenticationTicket se o cookie existir.
    public void Init(HttpApplication application) 
    {
    	//Wire up the BeginRequest event
    	application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
    }
  3. Implemente o evento Application_BeginRequest .
    private void Application_BeginRequest(Object source, EventArgs e)
    {	
       …code to log the ticket…
    }
    
  4. Obter o cookie de autenticação de formulários e, em seguida, desencriptar -lo.
  5. Os valores de registo. Seria recomenda a registar o seguinte no adição para as informações de formulários. Isto irá ajudar a alinhar os formulários regista informações de autenticação para o IIS, se necessário:
    • Data: Permite ver quando recebeu o pedido in.
    • RequestType: Mostra se o pedido é um Get ou um POST.
    • URL: Mostra o padrão de pedidos que conduziram ao problema.
    • Referenciador
    • ClientIP: Laços nos pedidos para um específico cliente.

Como sempre, não hesite em submeter ideias sobre os tópicos que pretende os destinatários nas colunas futuras ou na Knowledge Base utilizando o Pedir (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) formulário.

A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 2.0
Palavras-chave: 
kbtshoot kbiis kbcode kbasp kbmt KB910439 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 910439  (http://support.microsoft.com/kb/910439/en-us/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft