如何在Katana中组合多个身份验证处理程序?

时间:2016-03-05 04:30:24

标签: c# authentication asp.net-web-api owin katana

我想创建一个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服务上使用两种身份验证方法?

1 个答案:

答案 0 :(得分:4)

当身份验证失败时,身份验证中间件终止管道实际上并不正确。它被设计成可组合的。

每个中间件都可以提供零个或一个身份,最终成为ClaimsPrincipal