401 Usando Múltiplos Métodos de Autenticação Somente IE 10

1

Não sei se isso é mais um problema de codificação ou um problema de configuração do servidor, por isso, publiquei em stackoverflow e aqui ...

Em nosso site de produção, encontramos um problema específico do Internet Explorer 10.

Estou usando o jQuery fazendo um ajax POST para um serviço da Web no mesmo domínio e no IE10 estou obtendo uma resposta 401, o IE9 funciona perfeitamente bem. Devo mencionar que temos código espelhado em outra área do nosso site e funciona perfeitamente bem no IE10. A única diferença entre as duas áreas é que uma está sob um subdomínio e a outra está no nível raiz. www.my1stdomain.com vs. portal.my2nddomain.com

A estrutura de diretório no servidor para estes é:

\my1stdomain\webservice\name\service.aspx

\portal\webservice\name\service.aspx

Dentro das pastas \portal\ e \my1stdomain\ Eu tenho uma página que faz uma chamada ajax, ambas as páginas são idênticas.

$.ajax({
    type: 'POST',
    url: '/webservice/name/service.aspx/function',
    cache: false,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    data: '{ "json": "data" }',
    success: function() {

    },
    error: function() {

    }
});

As permissões verificadas são as mesmas nas duas pastas no lado do servidor. Eu apliquei uma correção para colocar a <meta http-equiv="X-UA-Compatible" value="IE=9"> para forçar a visualização de compatibilidade (colocar o IE no modo de compatibilidade corrige o problema) . Isso parece estar funcionando no IE10 no Windows 7, no entanto, o IE 10 no Windows 8 ainda vê o mesmo problema. Essas páginas são asp clássicas com os cabeçalhos que estão sendo incluídos, e também não há outras metatags sendo usadas. O doctype está sendo especificado como <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//" "http://www.w3.org/TR/html4/loose.dtd"> na página do portal e <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> no domínio principal.

UPDATE1

Eu usei o Microsoft Network Monitor 3.4 no servidor para capturar a solicitação. Eu usei o seguinte filtro para capturar o 401:

Property.HttpStatusCode.StringToNumber == 401

Esta foi a resposta

- Http: Response, HTTP/1.1, Status: Unauthorized, URL: /webservice/name/service.aspx/function Using Multiple Authetication Methods, see frame details
    ProtocolVersion: HTTP/1.1
    StatusCode: 401, Unauthorized
    Reason: Unauthorized
  - ContentType:  application/json; charset=utf-8
   - MediaType:  application/json; charset=utf-8
      MainType:  application/json
      charset: utf-8

    Server:  Microsoft-IIS/7.0
    jsonerror:  true
  - WWWAuthenticate: Negotiate
   - Authenticate:  Negotiate
      WhiteSpace:  
      AuthenticateData: Negotiate
  - WWWAuthenticate: NTLM
   - Authenticate:  NTLM
      WhiteSpace:  
      AuthenticateData: NTLM
    XPoweredBy:  ASP.NET
    Date:  Mon, 04 Mar 2013 21:13:39 GMT
    ContentLength:  105
    HeaderEnd: CRLF
  - payload: HttpContentType =  application/json; charset=utf-8
     HTTPPayloadLine: {"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}

A coisa aqui que realmente se destaca é

Unauthorized, URL: /webservice/name/service.aspx/function Using Multiple Authentication Methods

Com isso eu ainda estou confuso sobre o porquê isso só acontece no IE10 se for um problema de permissão / autenticação. O que foi adicionado a 10, ou onde devo estar procurando a causa raiz disso?

UPDATE2

Aqui estão os cabeçalhos da máquina cliente do fiddler (informações do servidor removidas) :

Principal

SESSION STATE: Done.
Request Entity Size: 64 bytes.
Response Entity Size: 9 bytes.

== FLAGS ==================
BitFlags: [ServerPipeReused] 0x10
X-EGRESSPORT: 44537
X-RESPONSEBODYTRANSFERLENGTH: 9
X-CLIENTPORT: 44770
UI-COLOR: Green
X-CLIENTIP: 127.0.0.1
UI-OLDCOLOR: WindowText
UI-BOLD: user-marked
X-SERVERSOCKET: REUSE ServerPipe#46
X-HOSTIP: ***.***.***.***
X-PROCESSINFO: iexplore:2644

== TIMING INFO ============
ClientConnected:    14:43:08.488
ClientBeginRequest: 14:43:08.488
GotRequestHeaders:  14:43:08.488
ClientDoneRequest:  14:43:08.488
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    14:40:28.943
FiddlerBeginRequest:    14:43:08.488
ServerGotRequest:   14:43:08.488
ServerBeginResponse:    14:43:08.592
GotResponseHeaders: 14:43:08.592
ServerDoneResponse: 14:43:08.592
ClientBeginResponse:    14:43:08.592
ClientDoneResponse: 14:43:08.592

    Overall Elapsed:    0:00:00.104

The response was buffered before delivery to the client.

== WININET CACHE INFO ============
This URL is not present in the WinINET cache. [Code: 2]

Portal

SESSION STATE: Done.
Request Entity Size: 64 bytes.
Response Entity Size: 105 bytes.

== FLAGS ==================
BitFlags: [ClientPipeReused, ServerPipeReused] 0x18
X-EGRESSPORT: 44444
X-RESPONSEBODYTRANSFERLENGTH: 105
X-CLIENTPORT: 44439
X-CLIENTIP: 127.0.0.1
X-SERVERSOCKET: REUSE ServerPipe#7
X-HOSTIP: ***.***.***.***
X-PROCESSINFO: iexplore:7132

== TIMING INFO ============
ClientConnected:    14:37:59.651
ClientBeginRequest: 14:38:01.397
GotRequestHeaders:  14:38:01.397
ClientDoneRequest:  14:38:01.397
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    14:37:57.880
FiddlerBeginRequest:    14:38:01.397
ServerGotRequest:   14:38:01.397
ServerBeginResponse:    14:38:01.464
GotResponseHeaders: 14:38:01.464
ServerDoneResponse: 14:38:01.464
ClientBeginResponse:    14:38:01.464
ClientDoneResponse: 14:38:01.464

    Overall Elapsed:    0:00:00.067

The response was buffered before delivery to the client.

== WININET CACHE INFO ============
This URL is not present in the WinINET cache. [Code: 2]
    
por jon3laze 05.03.2013 / 01:33

1 resposta

1

Você pode querer testar a configuração do registro do cliente descrita aqui:

Um status 401.1 inesperado é retornado ao usar cabeçalhos de pré-autenticação com o Internet Explorer e os Serviços de Informações da Internet
link

Teste do cliente:

Key: HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/  
Value: DisableNTLMPreAuth  
Data Type: REG_DWORD  
Value: 1  

Correção do servidor:

Para modificar esse comportamento no IIS, desative a Autenticação do Modo Kernel para o aplicativo da Web do IIS.

  • Abra o Gerenciador dos Serviços de Informações da Internet (IIS)
  • No painel Conexões, expanda o nome do servidor, expanda Sites e, em seguida, o site, o aplicativo ou o serviço da Web para o qual você deseja desabilitar a Autenticação de Modo do Kernel.
  • Vá até a seção Segurança no painel Início e clique duas vezes em Autenticação.
  • No painel Autenticação, selecione Autenticação do Windows.
  • Clique em Configurações avançadas no painel Ações.
  • Quando a caixa de diálogo Configurações avançadas aparecer, desmarque a caixa de seleção Habilitar autenticação no modo kernel
  • Clique em OK para fechar a caixa de diálogo Configurações avançadas.

IMPORTANTE: Desativar a Autenticação no Modo Kernel pode causar falha nos aplicativos da Web que exigem autenticação e delegação do Kerberos.

    
por 05.03.2013 / 04:27