我想创建一个Web API服务,该服务公开可以使用客户端证书 OR JWT令牌进行身份验证的资源。
我找到了一些validates a client certificate的中间件和一些很好的说明如何create your own authentication middleware。 Microsoft拥有验证JWT令牌的中间件OAuthBearerAuthenticationMiddleware
。显然我无法安装它们,因为第一个中间件将在身份验证失败时终止管道。
所以我想我会创建一个复合身份验证中间件类,它拥有两个AuthenticationHandler
个对象,并会从AuthenticateAsync()
为处理程序调用{{1}},直到返回一个有效的AuthenticateCoreAsync()
}。问题是AuthenticationTicket
类中的CreateHandler
方法受到保护,因此我似乎无法组成这些对象。
我无法自己实例化AuthenticationMiddleware
课程,因为它是内部的。
如何重新使用这些现有的中间件组件来启用这两种类型的身份验证,而无需将代码复制到我自己的处理程序中?
或者我是否以错误的方式解决这个问题,是否有另一种方法在同一个Web API服务上使用两种身份验证方法?
答案 0 :(得分:4)
当身份验证失败时,身份验证中间件终止管道实际上并不正确。它被设计成可组合的。
每个中间件都可以提供零个或一个身份,最终成为ClaimsPrincipal
。