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

C# 如何在Katana中组合多个身份验证处理程序?,c#,authentication,asp.net-web-api,owin,katana,C#,Authentication,Asp.net Web Api,Owin,Katana,我想创建一个web API服务,它公开一个资源,该资源可以使用客户端证书或JWT令牌进行身份验证来访问 我找到了一些中间件和一些很好的说明。Microsoft拥有验证JWT令牌的中间件。显然,我不能同时安装它们,因为当身份验证失败时,第一个中间件将终止管道 因此,我想创建一个复合身份验证中间件类,它拥有两个对象,并从其AuthenticateCoreAsync()为处理程序调用AuthenticateAsync(),直到其中一个返回有效的AuthenticationTicket。问题是Authe

我想创建一个web API服务,它公开一个资源,该资源可以使用客户端证书或JWT令牌进行身份验证来访问

我找到了一些中间件和一些很好的说明。Microsoft拥有验证JWT令牌的中间件。显然,我不能同时安装它们,因为当身份验证失败时,第一个中间件将终止管道

因此,我想创建一个复合身份验证中间件类,它拥有两个对象,并从其
AuthenticateCoreAsync()
为处理程序调用
AuthenticateAsync()
,直到其中一个返回有效的
AuthenticationTicket
。问题是
AuthenticationMiddleware
类中的
CreateHandler
方法受到保护,因此我似乎无法组合这些对象

我自己无法实例化
OAuthBeareAuthenticationHandler
类,因为它是内部类

如何重用这些现有的中间件组件来启用这两种类型的身份验证,而不将代码复制到自己的处理程序中


或者我这样做是错误的,是否有另一种方法可以在同一web API服务上使用两种身份验证方法?

身份验证中间件在身份验证失败时终止管道,这实际上是错误的。它被设计成可组合的


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

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


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

哦,我没有意识到这一点。让我试试看。谢谢哦,我没有意识到。让我试试看。谢谢