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

У меня есть служба webapi в/под DNN V7 (IIS/10 на Win10 Dev). Он работает нормально, но у меня есть один сценарий, в котором я хотел проверить ответ, который я получаю, с ожидаемыми базовыми ответами аутентификации, поскольку я, похоже, не могу найти этот ответ в другом месте.

Метод контроллера помечен этими атрибутами (что проверяется с использованием базовой аутентификации)

<HttpGet>
<DnnAuthorize(StaticRoles:="TestRole")>
  • Предоставление действительных учетных данных пользователя в основном заголовке аутентификации для пользователя с этой ролью возвращает 200 ok. пока все хорошо.

  • Вообще не предоставляя базовый заголовок аутентификации, возвращает 401 неавторизованный, все хорошо и ожидаемо.

  • однако, предоставляя базовый заголовок аутентификации, например, с неправильным паролем или именем пользователя, возвращает 500 внутренних ошибок сервера.

Итак, верна ли ошибка 500, если пользователь/пароль предоставлен, НО неправильный? В моей голове я должен получить 401 неавторизованный, поскольку у него есть учетные данные для проверки, они просто были неверными. Так что я бы не ожидал, что он взорвется с исключением, просто вернитесь без разрешения?

стек вызовов не очень показательный

[NullReferenceException: Object reference not set to an instance of an object.]
   System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult result) +113
   System.Web.Http.WebHost.HttpControllerHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +10
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9836613
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +50
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean&amp; completedSynchronously) +163

Возвращает ли базовая аутентификация (или реализация DotNetNuke атрибута DnnAuthorize) ошибку 500 намеренно в целях безопасности? Я неправильно настроил или настроил контроллер API? в основном, что мне здесь не хватает?


person Matma    schedule 23.06.2020    source источник


Ответы (1)


Код состояния 500 означает, что сервер ошибся и ожидает, что клиент повторит попытку, поэтому он никогда не связан с безопасностью и явно указывает на проблему.

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

  • Конфигурация некоторого другого промежуточного программного обеспечения в вашем приложении.
  • Проверка имени пользователя/пароля неверна, и на самом деле она проходит, но затем происходит сбой на более позднем этапе вашего кода.
  • В исходном коде SDK DNN есть ошибка.

Причина, по которой это 500, заключается в том, что ваше приложение не обрабатывает возникший сбой. Это вызвано одним из двух источников (или обоими выше), но в результате ваше приложение выдает значение 500 по умолчанию. Можно отловить эту проблему и вместо этого выдать 401, но, вероятно, лучше отследить проблему.

Первым шагом будет проверка того, что ваш код на этом шаге на самом деле не выполняется. Возможно, что-то там выполняется, когда вы ожидаете, что этого не будет (например, userId — это NULL вместо правильного значения), и проблема действительно где-то в другом.

Кроме того, учитывая, что V7 не является последней версией, и при поиске есть другие экземпляры SO DNN, имеющие проблемы до V9, я бы предложил проверить проблему в более поздней версии. И затем, если это все еще проблема, опубликуйте ее в соответствующих выпусках github.

person Warren Parad    schedule 25.06.2020
comment
Между моим приложением и промежуточным программным обеспечением веб-сервиса нет ничего, поэтому я сократил код до простого приветствия, мир для проверки. Я получаю тот же ответ от почтальона при двойной проверке, поэтому я не думаю, что это мое приложение. Я также проверил несколько других примеров и ролей, все тот же ответ. Я подозреваю, что это DNN 7, так как я получаю тот же ответ от других примеров, которые используют базовую аутентификацию. Я не могу перейти на более позднюю версию, так как на данный момент мы застряли на версии 7. Мне просто придется жить с этим. - person Matma; 29.06.2020