Пустой заголовок авторизации приводит к ошибке 400. ИИС 7.5

Я нашел обходной путь для этого, но у меня есть клиент с сервером, который выдает 400 ошибок, когда я делаю запрос GET с пустым заголовком авторизации. Он отлично работает, когда нет заголовка авторизации. Я хотел бы объяснить \ или исправить проблему, а не просто сказать, что я ее исправил.

Мой старый код был таким:

    request.Headers["Authorization"] = _Request.ServerVariables["HTTP_AUTHORIZATION"] ?? string.Empty;
    request.GetResponse();

Я переключился на это:

    if (_Request.ServerVariables["HTTP_AUTHORIZATION"] != null)
    {
        request.Headers["Authorization"] = _Request.ServerVariables["HTTP_AUTHORIZATION"];
    }
    request.GetResponse();

person busbina    schedule 14.11.2013    source источник


Ответы (1)


Возможно, вы захотите увидеть этот вопрос: Что такое переменная среды HTTP_AUTHORIZATION?

По сути, когда вы передаете заголовок авторизации, сервер должен использовать его для проверки наличия у пользователя доступа к базовому ресурсу. Отправляя заголовок с пустым значением, вы, по сути, говорите серверу использовать пустые учетные данные... что не работает.

Когда вы не отправляете заголовок авторизации, сервер пытается использовать свои учетные данные по умолчанию для ресурса, который проходит.

Как это должно работать:

  1. Клиент запрашивает ресурс.
  2. Сервер пытается доставить ресурс. Если требуется дополнительная авторизация, то возвращается заголовок 401 с заголовком WWW-Authenticate.
  3. Клиент запрашивает у пользователя учетные данные и повторно отправляет запрос с заголовком авторизации.
  4. Сервер проверяет авторизацию и в случае успеха доставляет ресурс. В случае неудачи он снова отправит 401.

Ваш код должен отправлять заголовок авторизации только в том случае, если удаленный сервер отвечает на первоначальный запрос 401 и заголовком WWW-Authenticate. В противном случае этот заголовок не должен быть отправлен.

Дополнительная информация: http://en.wikipedia.org/wiki/Basic_access_authentication.

person NotMe    schedule 14.11.2013
comment
Имеет смысл. Но я не могу воспроизвести это поведение с другими веб-сайтами. Я могу использовать этот же заголовок с другими сайтами IIS и сайтами apache, и они не выдают это. Мне интересно, была ли настройка IIS, чтобы заставить это. - person busbina; 14.11.2013
comment
@busbina: существует множество потенциальных проблем. Начиная от ошибки в этой конкретной версии IIS и заканчивая различиями в пакетах обновлений/уровнях обновлений между работающими и неработающими машинами. Может быть даже прокси-сервер на этом конкретном клиенте, вызывающий проблемы. - person NotMe; 14.11.2013
comment
Милая, они работают на более старой версии 2008 R2, и их также нет в нашей среде хостинга, поэтому мы не можем гарантировать, что какой-то прокси не используется. Спасибо за помощь. - person busbina; 14.11.2013