2017-07-19 34 views
1

后OWIN中间件组件如何插件启动类之外的OWIN中间件?堵启动

我有这个OWIN中间件基本上建立用于传入的请求的认证结束点。在我们的开发周期中,我们已经注意到几次,远程元数据端点(基于ADFS)会在应用程序启动时尝试配置中间件时导致异常。 但是,我们希望让应用程序启动时,即使中间件启动失败,请在稍后尝试点初始化中间件。我如何做到这一点,而无需访问'IAppBuilder'界面。

我用下面的方法调用使用预先内置中间件在卡塔纳为ADFS终点设置 -

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

最有可能失败的中间件的初始化,因为你试图做太多的构造中间件。我建议将中间件留在管道中,但推迟到后来的生命周期。 – Nkosi

+0

我也建议检查Katana预建的中间件ADFS的源代码,看看瓶颈在哪里。 – Nkosi

+0

@Nkosi我知道中间件未能初始化的原因。但是,我的问题是,如果它未能初始化并且我的应用程序继续并完成启动,是否有办法在稍后插入管道中的中间件。 – Dibzmania

回答

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

+0

谢谢@ Mikhail.That回答我的问题。 – Dibzmania

+0

它不是专为后来添加的中间件,但这里的样品做手工:https://github.com/Tratcher/MiddlewareInjector/ – Tratcher