Пустой заголовок авторизации приводит к ошибке 400. IIS 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();
1 ответ
Возможно, вы захотите увидеть этот вопрос: Что такое переменная среды HTTP_AUTHORIZATION?
По сути, когда вы передаете заголовок Authorization, сервер должен использовать это для проверки, имеет ли пользователь доступ к базовому ресурсу. Отправляя заголовок с пустым значением, вы, по сути, говорите серверу использовать пустые учетные данные... что не удается.
Если вы не отправляете заголовок авторизации, сервер пытается использовать свои учетные данные по умолчанию для ресурса, который проходит.
Это должно работать так:
- Клиент запрашивает ресурс.
- Сервер пытается доставить ресурс. Если требуется дополнительная авторизация, тогда заголовок 401 отправляется обратно с заголовком WWW-Authenticate.
- Клиент запрашивает учетные данные пользователя и повторно отправляет запрос с заголовком авторизации.
- Сервер проверяет авторизацию и, в случае успеха, доставляет ресурс. В случае неудачи он снова отправит 401.
Ваш код должен отправлять только заголовок авторизации, ЕСЛИ удаленный сервер отвечает на первоначальный запрос 401 и заголовок WWW-Authenticate. В противном случае этот заголовок не должен быть отправлен.
Более подробная информация по адресу: http://en.wikipedia.org/wiki/Basic_access_authentication