基本身份验证错误凭据的预期行为

时间:2020-06-23 18:38:47

标签: asp.net-web-api basic-authentication dotnetnuke-7

我在DNN V7中/之下有一个webapi服务(在Win10 Dev框中为IIS / 10)。 它可以正常工作,但是我有一种情况想检查得到的响应是否符合预期的基本身份验证响应,因为我似乎无法在其他地方找到此答案。

控制器方法标记有这些属性(可使用基本身份验证进行验证)

<HttpGet>
<DnnAuthorize(StaticRoles:="TestRole")>
  • 在具有此角色的用户的基本auth头中提供有效的用户凭据,将返回 200好到目前为止一切都很好。

  • 根本不提供基本的auth标头,返回未经授权的401,一切正常。

  • 但是,向基本auth标头提供错误的密码或用户名会返回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

出于安全性目的,基本auth(或DotNetNuke的DnnAuthorize属性的实现)是否故意返回500错误?我没有正确设置或配置api控制器吗?基本上我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

500状态代码表示服务器混乱,并希望客户端重试,因此它与安全性无关,并且清楚地表明存在问题。

有两种可能的问题来源:

  • 在应用程序中配置其他一些中间件。
  • 用户名/密码验证不正确,实际上已经通过了验证,但是随后在代码中失败了。
  • DNN的SDK源中有一个错误。

之所以是500,是因为您的应用程序无法处理引发的故障。这是由两个来源之一(或以上两个原因)引起的,但结果是您的应用程序抛出默认值500。有可能捕获到此问题并抛出401,但可能更容易找到问题所在。

第一步是验证该步骤中的代码实际上没有被执行。可能在您不希望执行某项操作时(例如userIdNULL而不是正确的值),问题实际上出在其他地方。

另外,鉴于V7不是最新版本,并且从周围搜索DNN的其他SO实例在V9之前存在问题,我建议在以后的版本中验证该问题。然后如果仍然存在问题,将其发布到相关的github issues