PROBLEMA: Solicitações de autenticação de formulários Are Not Directed para loginUrl Page

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 313116
Sintomas
Quando você usa autenticação de formulários, solicitações não serão redirecionadas para a página que está especificada no atributo loginUrl .
Causa
Esse problema ocorre quando mais de um aplicativo em um servidor usa autenticação de formulários e essas configurações são idênticas:
  • Nomes de cookie
  • Caminhos de cookie
  • Chaves

Nomes idênticos de cookie

Autenticação de formulários funciona principalmente do cookie de autenticação. Um cookie de autenticação é colocado na coleção HttpResponse.Cookies depois que um usuário é autenticado. Quando uma solicitação chega, autenticação de formulários recupera o cookie de autenticação da coleção HttpRequest.Cookies .

Se um cookie válido não estiver presente, o usuário é redirecionado para a página que está especificada no atributo loginUrl . Se houver um cookie válido, autenticação de formulários considera o usuário autenticado.

O atributo de nome do <forms> elemento nos arquivos .config determina o nome do cookie de autenticação. Por padrão, o nome do cookie é ASPXAUTH. Portanto, se vários aplicativos no mesmo servidor Web usarem o nome "authCookie" para o cookie de autenticação, uma solicitação que foi autenticada em um aplicativo será considerada autenticado em outro aplicativo porque a solicitação contém um cookie denominado authCookie.

Caminhos de cookie idênticos

Autenticação de formulários funciona principalmente do cookie de autenticação. O atributo de caminho da <forms> elemento determina qual aplicativo o cookie de autenticação pode ser enviado para no servidor Web. O valor padrão do atributo de caminho é uma barra invertida (/) para que o cookie pode ser enviado para todos os aplicativos no site da Web.

Portanto, se vários aplicativos no mesmo site usarem a barra para o caminho do cookie de autenticação, quando uma solicitação é enviada de um aplicativo para outro aplicativo, o cookie de autenticação será enviado para o outro aplicativo.

Chaves idênticas

O <machinekey> elemento controla a criptografia, a descriptografia e a validação do cookie de autenticação. A configuração padrão para o elemento é da seguinte maneira:
<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />				
se vários aplicativos usam valores idênticos, explícitos para o <machinekey> elemento, um cookie de autenticação que é enviado de um aplicativo é descriptografado por outro aplicativo com êxito.
Resolução
Para resolver esse problema, certifique-se que pelo menos uma das três configurações (nome do cookie, caminho do cookie e chave) é diferente para cada aplicativo que usa autenticação de formulários.

Diferentes nomes de cookie

Se você usar nomes de cookie diferentes para cada aplicativo, você garantir a que autenticação de formulários somente recupera um cookie de acordo com o nome que está configurado para esse aplicativo.

Por exemplo:
  1. Application1 usa authCookie1 nome.
  2. Application2 usa authCookie2 nome.
  3. Uma solicitação é feita para Application2.
  4. Autenticação de formulários tenta recuperar authCookie2 da coleção HttpRequest.Cookies , mesmo que o cookie authCookie1 existe.

    Quando a autenticação de formulários não encontra um cookie de autenticação com authCookie2 nome, ele é redirecionado para a página que for especificada no atributo loginUrl Application2.

Diferentes caminhos de cookie

Se você usar um caminho de cookie diferentes, você garantir que o cookie de autenticação será enviado apenas para o aplicativo no qual o cookie foi originada.

Por exemplo:
  1. Application1 usa /application1 caminho.
  2. Application2 usa /application2 caminho.
  3. Autenticação de formulários autentica Application1.
  4. Uma solicitação é feita para Application2. O navegador não enviar o cookie de autenticação de Application1 para Application2 porque o cookie pode ser enviado apenas para Application1.
Observação : O atributo de caminho diferencia maiúsculas de minúsculas. Portanto, se você definir o valor do atributo de caminho como /application1, e se o nome do aplicativo for Application1, o caminho do cookie de autenticação é /application1.

Quando o usuário é autenticado e redirecionado, o navegador não envia o cookie com o caminho /application1 para o aplicativo Application1. Essencialmente, o cookie de autenticação não é parte da coleção HttpRequest.Cookies . Como resultado, o usuário é redirecionado para a página é especificada no atributo loginUrl , mesmo após a autenticação.

A Microsoft recomenda que você confinar cookies de autenticação de formulários para áreas do site são protegidos por criptografia SSL (Secure Sockets LAYER).

Chaves diferentes

Se aplicativos diferentes usam valores diferentes, explícitos para o <machinekey> elemento, a criptografia, a descriptografia ou a validação da falha de cookie de autenticação. Como resultado, o usuário é redirecionado para a página que é especificada no atributo loginUrl para o aplicativo.

Observação : mesmo em configurações idênticas, regras de autorização ainda se aplicam. Nos exemplos a seguir, se User1 é autenticado em Application1 e faz que uma solicitação para Application2, a solicitação é autenticada. No entanto, como User1 não é um dos usuários permitidos na seção <authorization>, a solicitação não está autorizada e é negada.

Web.config em Application1
<configuration>   <system.web>      <authorization>         <allow users="User1,User2,User3" />         <deny users="?" />      </authorization>   </system.web></configuration>				
Web.config em Application2
<configuration>   <system.web>      <authorization>         <allow users="User4,User5,User6" />         <deny users="?" />      </authorization>   </system.web></configuration>				
Situação
Esse comportamento é por design.
Mais Informações

Etapas para reproduzir o problema

Configure dois aplicativos ASP.NET chamados Application1 e Application2 usar autenticação de formulários com as seguintes configurações:
  1. Adicione o seguinte código como o arquivo Web.config para ambos os aplicativos:
    <?xml version="1.0" encoding="utf-8" ?><configuration>      <system.web>   <authentication mode="Forms">      <forms loginUrl="login.aspx" name="formsauth1" timeout="60" path="/" >         <credentials passwordFormat="Clear">            <user name="username" password="password"/>         </credentials>      </forms>   </authentication>   <authorization>	     <deny users="?" />     <allow users="*" />   </authorization>    </system.web></configuration>					
  2. Adicionar o código a seguir como o arquivo login.aspx para ambos os aplicativos:
    <%@ Page language="vb" AutoEventWireup="true" %>	    <form  runat=server ID="Form1">          <asp:Label runat="server" label="lblUserid" Text="UserID:" />      <asp:TextBox id="txtUsername" runat=server Text="username" /><br>      <asp:Label runat="server" label="lblPassword" Text="Password:" />      <asp:TextBox id="txtPassword" runat=server Text="password" /><br>      <asp:button text="Login" OnClick="Login_Click" runat=server ID="btnLogin"/><br>      <asp:Label runat="server" id="lblStatus" />    </form>	 <script runat=server>sub Login_Click(sender as Object , e as EventArgs )	if(FormsAuthentication.Authenticate(txtUsername.Text, txtPassword.Text)) then		FormsAuthentication.RedirectFromLoginPage(txtUsername.Text, false)	else				lblStatus.Text = "Not Authenticated"	end if	end sub</script> 					
  3. Adicionar o código a seguir como o arquivo default.aspx para Application1:
    <%@ Page AutoEventWireup="true" %><asp:Label id=label1 runat="server" Text="Authenticated In Application1"></asp:Label><br><asp:Label Runat=server ID="Label2" ></asp:Label></Form>					
  4. Adicionar o código a seguir como o arquivo default.aspx para Application2:
    <%@ Page AutoEventWireup="true" %><asp:Label id=label1 runat="server" Text="Authenticated In Application2"></asp:Label><br><asp:Label Runat=server ID="Label2" ></asp:Label></Form>					
  5. Solicite default.aspx no Application1.
  6. Depois que você é redirecionado para login.aspx, efetuar logon digitando o nome de usuário para o nome de usuário e senha para a senha. Observe que você é redirecionado para default.aspx no Application1.
  7. Solicite default.aspx no Application2. Observe que você não será redirecionado para a página login.aspx em Application2.
Referências
Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
308157COMO: Implementar baseada em formulários autenticação no seu aplicativo ASP.NET usando o Visual Basic .NET
306590INFO: Visão geral sobre segurança do ASP.NET
313091COMO: Criar chaves usando Visual Basic .NET para uso em autenticação de formulários

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 313116 - Última Revisão: 02/23/2007 06:52:44 - Revisão: 2.8

Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbmt kbconfig kbcookie kbprb kbsecurity KB313116 KbMtpt
Comentários