如何在 Katana 中组合多个身份验证处理程序?
How to compose multiple authentication handlers in Katana?
我想创建一个 Web API 服务,该服务公开可以使用客户端证书 或 JWT 令牌进行身份验证访问的资源。
我发现了一些 validates a client certificate and some nice instructions how to create your own authentication middleware. Microsoft has middleware OAuthBearerAuthenticationMiddleware
验证 JWT 令牌的中间件。显然我不能同时安装它们,因为第一个中间件将在身份验证失败时终止管道。
所以我想我会创建一个复合身份验证中间件 class,它拥有两个 AuthenticationHandler
对象,并会调用 AuthenticateAsync()
从它的 AuthenticateCoreAsync()
直到一个 returns一个有效的AuthenticationTicket
。问题是 AuthenticationMiddleware
class 中的 CreateHandler
方法受到保护,所以我似乎无法组合这些对象。
我无法自己实例化 OAuthBearerAuthenticationHandler
class,因为它是内部的。
如何在不将代码复制到我自己的处理程序中的情况下重新使用这些现有的中间件组件来启用这两种类型的身份验证?
或者我是不是以错误的方式解决了这个问题,是否有另一种方法可以在同一个网络 API 服务上使用两种身份验证方法?
认证中间件在认证失败时终止管道实际上是不正确的。它被设计成可组合的。
每个中间件都可以贡献零个或一个身份,最终成为ClaimsPrincipal
。
我想创建一个 Web API 服务,该服务公开可以使用客户端证书 或 JWT 令牌进行身份验证访问的资源。
我发现了一些 validates a client certificate and some nice instructions how to create your own authentication middleware. Microsoft has middleware OAuthBearerAuthenticationMiddleware
验证 JWT 令牌的中间件。显然我不能同时安装它们,因为第一个中间件将在身份验证失败时终止管道。
所以我想我会创建一个复合身份验证中间件 class,它拥有两个 AuthenticationHandler
对象,并会调用 AuthenticateAsync()
从它的 AuthenticateCoreAsync()
直到一个 returns一个有效的AuthenticationTicket
。问题是 AuthenticationMiddleware
class 中的 CreateHandler
方法受到保护,所以我似乎无法组合这些对象。
我无法自己实例化 OAuthBearerAuthenticationHandler
class,因为它是内部的。
如何在不将代码复制到我自己的处理程序中的情况下重新使用这些现有的中间件组件来启用这两种类型的身份验证?
或者我是不是以错误的方式解决了这个问题,是否有另一种方法可以在同一个网络 API 服务上使用两种身份验证方法?
认证中间件在认证失败时终止管道实际上是不正确的。它被设计成可组合的。
每个中间件都可以贡献零个或一个身份,最终成为ClaimsPrincipal
。