Назад | Перейти на главную страницу

401 Использование нескольких методов аутентификации только в IE 10

Я не уверен, что это больше связано с кодированием или с настройкой сервера, поэтому я разместил его на переполнение стека и тут...

На нашем рабочем сайте мы столкнулись с проблемой, специфичной для Internet Explorer 10.

Я использую jQuery, выполняя ajax POST для веб-службы в том же домене, а в IE10 я получаю ответ 401, IE9 работает отлично. Я должен упомянуть, что у нас есть зеркальный код в другой области нашего сайта, и он отлично работает в IE10. Единственная разница между этими двумя областями состоит в том, что одна находится в субдомене, а другая - на корневом уровне. www.my1stdomain.com vs. portal.my2nddomain.com

Структура каталогов на сервере для них следующая:

\my1stdomain\webservice\name\service.aspx

\portal\webservice\name\service.aspx

Внутри \portal\ и \my1stdomain\ папки у меня есть страница, которая выполняет вызов ajax, обе страницы идентичны.

$.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() {

    }
});

Я подтвердил, что разрешения одинаковы для обеих папок на стороне сервера. Я применил обходное решение, разместив <meta http-equiv="X-UA-Compatible" value="IE=9"> заставить представление совместимости (перевод IE в режим совместимости устраняет проблему). Кажется, это работает в IE10 в Windows 7, однако IE 10 в Windows 8 по-прежнему сталкивается с той же проблемой. Эти страницы представляют собой классический asp с включенными заголовками, также не используются другие метатеги. Тип документа указывается как <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//" "http://www.w3.org/TR/html4/loose.dtd"> на странице портала и <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> на основном домене.

ОБНОВЛЕНИЕ1


Я использовал Microsoft Network Monitor 3.4 на сервере для захвата запроса. Я использовал следующий фильтр для захвата 401:

Property.HttpStatusCode.StringToNumber == 401

Это был ответ

- 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"}

Что здесь действительно выделяется, так это

Неавторизованный, URL: /webservice/name/service.aspx/function Использование нескольких методов аутентификации

Я до сих пор не понимаю, почему это происходит в IE10, только если это проблема с разрешением / аутентификацией. Что было добавлено к 10 или где мне искать причину этого?

ОБНОВЛЕНИЕ2


Вот заголовки с клиентской машины от fiddler (информация о сервере удалена):

Основной

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]

Портал

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]

Вы можете протестировать описанный здесь параметр реестра клиента:

Неожиданный статус 401.1 возвращается при использовании заголовков предварительной проверки подлинности с Internet Explorer и Internet Information Services
http://support.microsoft.com/kb/2749007

Клиентский тест:

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

Исправление сервера:

Чтобы изменить это поведение в IIS, отключите проверку подлинности в режиме ядра для веб-приложения IIS.

  • Открыть диспетчер информационных служб Интернета (IIS)
  • На панели «Подключения» разверните имя сервера, разверните «Сайты», а затем сайт, приложение или веб-службу, для которых вы хотите отключить аутентификацию в режиме ядра.
  • Прокрутите до раздела Безопасность на главной панели и дважды щелкните Аутентификация.
  • На панели «Проверка подлинности» выберите «Проверка подлинности Windows».
  • Щелкните Дополнительные параметры на панели действий.
  • Когда появится диалоговое окно Advanced Settings, снимите флажок Enable Kernel-mode authentication.
  • Щелкните OK, чтобы закрыть диалоговое окно Advanced Settings.

ВАЖНО! Отключение аутентификации в режиме ядра может привести к сбою веб-приложений, требующих аутентификации и делегирования Kerberos.