【问题标题】:Plugging a OWIN middleware component after startup启动后插入 OWIN 中间件组件
【发布时间】:2017-12-24 06:59:24
【问题描述】:

如何在 Startup 类之外插入 OWIN 中间件?

我有这个 OWIN 中间件,它基本上为传入请求设置了一个身份验证端点。在我们的开发周期中,我们多次注意到远程元数据端点(基于 ADFS)出现故障,这会在尝试在应用程序启动时配置中间件时导致异常。 但是,即使中间件初始化失败,我们也希望让应用程序启动,并在稍后尝试初始化中间件。在没有访问“IAppBuilder”界面的情况下如何做到这一点。

我正在使用 Katana 中的预构建中间件进行 ADFS 端点设置,使用以下方法调用 -

app.UseActiveDirectoryFederationServicesBearerAuthentication(
                    new ActiveDirectoryFederationServicesBearerAuthenticationOptions
                    {
                        MetadataEndpoint = ConfigurationManager.AppSettings["ida:AdfsMetadataEndpoint"],
                        TokenValidationParameters = new TokenValidationParameters()
                        {
                            ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                        }
                    });

【问题讨论】:

  • 这很可能在初始化中间件时失败,因为您试图在中间件的构造函数中做太多事情。我建议将中间件留在管道中,但将繁重的工作推迟到其生命周期的后期。
  • 我还建议检查 Katana 中用于 ADFS 的预构建中间件的源代码,以了解瓶颈在哪里。
  • @Nkosi 我知道中间件无法初始化的原因。但是我的问题是,如果它无法初始化并且我的应用程序继续并完成启动,有没有办法稍后在管道中插入中间件。
  • 没有。管道是在启动时通过构建器建立的。构建完成后,您将无法再修改中间件管道。 review source code
  • ADFS middle-ware source code 检查初始化期间做了什么,看看你是否能想出一个解决办法。

标签: asp.net owin middleware katana


【解决方案1】:

OWIN 基础架构并非设计为在执行启动代码后在运行时进行修改。有关更多信息,请参阅Is it possible to add WsFederationAuthenticationOptions at runtime? 讨论。

如果您在特定中间件失败时遇到问题,请尝试将其包装在自定义的假实现中并手动处理(失败?)初始化。

查看其他相关的 SO 线程:

register new middleware to OWIN pipeline at runtime without restart application

Add Owin Pipeline Middleware after OwinStartup for new Tenant

【讨论】:

猜你喜欢
  • 2014-08-13
  • 2014-04-21
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多