Предоставление сообщения об отказе в аутентификации в httplisteners authenticationselectordelegate

В настоящее время я использую делегата httplistener authenticationselector для проверки подлинности Windows и проверки IP, и он отлично работает, поскольку он запрещает и разрешает именно тем клиентам, которыми он должен быть.

Однако проблема в том, что когда кому-то отказывают, он получает http-ответ 403, который, по-видимому, интерпретируется большинством браузеров как пустой экран. Что я хотел бы сделать, так это отправить сообщение, в котором говорится что-то вроде «доступ запрещен: ваш IP-адрес внесен в белый список».

Это возможно?

Фрагмент делегата приведен ниже (который отлично работает на данный момент).

AuthenticationSchemeSelector pIPChecker = pRequest =>
{
    if (!pfunIPChecker(pRequest.RemoteEndPoint.Address))
    {
        LogHelper.writeToEventLog(
            "WARNING, BANNED IP: " + pRequest.RemoteEndPoint.Address.MapToIPv4().ToString() + "attempted to login", 
            EventLogEntryType.Warning,
            LogHelper.EventLogID.PermissionFailure);

        return AuthenticationSchemes.None;
    }

    return AuthenticationSchemes.Anonymous;
}

person Nick    schedule 08.05.2019    source источник
comment
Ошибка 403 никогда не была замечена вашим httplistener, поэтому ничего нельзя сделать. Ошибка 403 указывает на то, что у клиента нет прав на подключение к вашему серверному приложению, и брандмауэр на машине или в сети запрещает доступ к вашему приложению.   -  person jdweng    schedule 08.05.2019
comment
@jdweng 403 — это то, что httplistener отправляет обратно, если селектор схемы аутентификации возвращает None. Это определенно не проблема брандмауэра (поскольку вызывается описанный ниже метод ведения журнала), и определенно вызывается делегат.   -  person Nick    schedule 08.05.2019
comment
Просто чтобы убедиться, что я не ошибаюсь: вы хотите показать пользователю сообщение, когда он был отклонен вашим сервером во время аутентификации, исходящей с вашего сервера?   -  person X39    schedule 15.05.2019
comment
да, это правильно @X39   -  person Nick    schedule 16.05.2019
comment
Тогда правильный способ - выполнить проверку фактической обработки контента. Вы также можете вернуть 403, установив соответствующий httpListenerContext.Response.StatusCode в 403   -  person X39    schedule 16.05.2019
comment
@ X39 ах, как жаль, я думал, что мне не придется этого делать :( К сожалению, хотя я могу сделать это с проверкой ip, я не могу с аутентификацией Windows   -  person Nick    schedule 17.05.2019


Ответы (1)


Как указал X39, единственный способ сделать это, по-видимому, состоит в том, чтобы не использовать делегат Authenticator, а вместо этого фактически прочитать запрос как обычно и отправить обратно 403 с желаемым содержимым.

person Nick    schedule 06.07.2019