5

我有一个多租户应用程序,每个租户都可以为 WsFed 或 OpenIdConnect 定义自己的 ClientID、权限等。所有租户都在 OwinStartup 中注册,如下所示:

 public void Configuration(IAppBuilder app)
 {
    List<WsFederationAuthenticationOptions> WsFedTenantOptions = BuildWsFedTenantOptionsList();
    List<OpenIdConnectAuthenticationOptions> OpenIdConnectTenantOptions = BuildOpenIdConnectTenantOptionsList();

    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
    app.UseCookieAuthentication(new CookieAuthenticationOptions() { CookieSecure = CookieSecureOption.Never });

    foreach (var WsFedTenantOption in WsFedTenantOptions)
        app.UseWsFederationAuthentication(WsFedTenantOption);

    foreach (var OpenIdConnectTenantOption in OpenIdConnectTenantOptions)
        app.UseOpenIdConnectAuthentication(OpenIdConnectTenantOption);

    ...
}

它通过 切换要使用的 STS context.Authentication.Challenge(AuthenticationType)。这工作得很好。

问题是当新租户注册时,我如何在没有应用程序池回收的情况下访问IAppBuilder和添加新租户?AuthenticationOptions

4

1 回答 1

10

IAppBuilder 启动后不存在,用于构建请求执行管道,然后丢弃。管道并非设计为在启动后进行修改。

于 2015-03-10T04:37:23.157 回答