我想创建一个web API服务,它公开一个可以使用客户端证书访问的资源 或 用于认证的JWT令牌。
我找到了一些中间件 validates a client certificate 还有一些很好的说明 create your own authentication middleware 微软有中间件 OAuthBearerAuthenticationMiddleware 验证JWT令牌。显然,我不能只安装这两个中间件,因为当身份验证失败时,第一个中间件将终止管道。
OAuthBearerAuthenticationMiddleware
所以我想创建一个复合身份验证中间件类,它拥有两个 AuthenticationHandler 对象,并将调用 AuthenticateAsync() 对于来自其 AuthenticateCoreAsync() 直到返回有效 AuthenticationTicket 问题是 CreateHandler 中的方法 AuthenticationMiddleware 类是受保护的,所以我似乎无法组合这些对象。
AuthenticationHandler
AuthenticateAsync()
AuthenticateCoreAsync()
AuthenticationTicket
CreateHandler
AuthenticationMiddleware
我无法实例化 OAuthBearerAuthenticationHandler 因为它是内在的。
OAuthBearerAuthenticationHandler
如何在不将代码复制到自己的处理程序中的情况下重用这些现有中间件组件来启用两种类型的身份验证?
或者,我的做法是错误的,是否有另一种方法可以在同一个web API服务上使用两种身份验证方法?
当身份验证失败时,身份验证中间件终止管道实际上是不正确的。它的设计是可组合的。
每个中间件可以贡献零个或一个身份 ClaimsPrincipal 最后
ClaimsPrincipal