身份验证中间件 - 指示失败

Authentication Middleware - Indicate Failure

我正在尝试为我的 Web api(使用 asp.net 核心)编写一些身份验证中间件,但我不确定如何指示身份验证失败。

我的想法是允许多种身份验证方法,例如;基本(使用授权 header),在请求的 body 中传递凭据,可能使用不记名令牌等

我不确定的一点是如何从中间件中指示成功或失败。唯一的中间件我把它写到"do a thing"(比如日志记录),让请求继续它的快乐方式。

如果认证失败,我该如何表示? 我想要 return 一个 HTTP 状态代码,但我不确定请求管道的其余部分会发生什么,它是否会中止 in-place 并返回之前的中间件?

由于这是身份验证,我想它应该是管道中的第一个中间件。

如果我打算支持多种身份验证方法,最好将它们全部放在同一个中间件中,还是有可能(或更好)使每个中间件具有一种身份验证机制。 如果可能的话,我怎么写才能区分 "the supplied credentials are bad, fail here" 和 "this middleware didn't find any appropriate credentials that it supports, but maybe the next one will".

我喜欢 1 个中间件做 1 件事的想法,但我不喜欢中间件需要知道它是链中的最后一个,因为它依赖于开发人员将它放在正确的顺序(很容易忘记并稍后移动它)。

谢谢。

Asp.Net Core 有一个完整的身份验证/授权框架,值得一读。

首先要考虑的是将认证与授权分开。身份验证中间件查看请求并尝试生成 ClaimsIdentity。如果他们失败了,他们不需要终止请求,他们可以让它匿名继续。这允许您链接多种身份验证。

通过认证中间件后,就可以对结果进行授权了。您可以将其作为一个整体中间件来执行此操作,或者根据 MVC 控制器或操作更细化。

但一般来说,中间件顺序对于运行良好的应用程序通常很重要。