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

HTTP требует, чтобы прокси, создающий 407, отправлял вызов Proxy-Authenticate. Для службы Basic простой пример:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="Office proxy"

Числовой статус, имя заголовка и синтаксис, специфичный для схемы, одинаково важны. Брендированная страница ошибки со словом authentication в теле не заменяет заголовок. Пользовательские реализации также должны отправлять полный ответ HTTP 407, включая терминатор заголовка и обрамление тела.

Проверьте ответ, дошедший до этого клиента

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

Если служба вместо этого отправляет 405 или другую ошибку, не переименовывайте каждый такой ответ в 407 внутри пользовательского клиента. Вы скроете настоящие сбои политики методов и всё равно не получите надёжного согласования схемы. Исправьте поведение службы или используйте её документированный поддерживаемый путь аутентификации.

Несколько вызовов тоже требуют настоящего анализатора HTTP. Запятая может разделять параметры или вызовы; слепое деление всего заголовка по запятым может испортить realm в кавычках. Используйте поддерживаемую реализацию аутентификации клиента вместо череды строковых замен.

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

Похожие статьи