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

Posted

技术标签:

【中文标题】基本身份验证错误凭据的预期行为【英文标题】:Expected behaviour with Basic Authentication bad credentials 【发布时间】:2020-06-23 18:38:47 【问题描述】:

我在 DNN V7 中/下有一个 webapi 服务(Win10 Dev box 上的 IIS/10)。 它工作正常,但我有一个场景我想检查我得到的响应与预期的基本身份验证响应,因为我似乎无法在其他地方找到这个答案。

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

<HttpGet>
<DnnAuthorize(StaticRoles:="TestRole")>

在基本身份验证标头中为具有此角色的用户提供有效的用户凭据返回 200 好的。到目前为止一切顺利。

根本不提供基本的身份验证标头,返回 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 控制器错误?基本上我在这里错过了什么?

【问题讨论】:

【参考方案1】:

500 状态码表示服务器出现故障并希望客户端重试,因此它与安全 无关,并且清楚地表明某处存在问题。

有两种可能的问题来源:

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

这是 500 的原因是因为您的应用程序没有处理引发的故障。它是由两个来源之一(或以上两个来源)引起的,但因此您的应用程序会抛出默认的 500。可能会发现此问题并抛出 401,但最好追查问题。

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

另外,鉴于 V7 不是最新版本,并且通过四处搜索,还有其他 DNN 的 SO 实例在 V9 之前存在问题,我建议在更高版本上验证问题。然后,如果在相关的github issues 上发布它仍然是一个问题。

【讨论】:

我的应用程序和 Web 服务中间件之间没有任何关系,我将代码简化为一个简单的 hello world 来检查。仔细检查时,我从邮递员那里得到了相同的回复,所以我不认为这是我的申请。我还检查了其他几个示例和角色,都是相同的响应。我怀疑它是 DNN 7,因为我从其他使用基本身份验证的示例中得到了相同的响应。我无法更改为更高版本,因为我们目前停留在版本 7 上。我只能忍受它。

以上是关于基本身份验证错误凭据的预期行为的主要内容,如果未能解决你的问题,请参考以下文章

请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据 automl

FCM 推送 - 请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据

Firebase Facebook 身份验证:格式错误或过期的身份验证凭据

Android WebView 清除基本身份验证凭据

flutter_facebook_auth:提供的身份验证凭据格式错误或已过期

在 URL 和加密中传递的 HTTP 基本身份验证凭据