2015-03-10 4 views
2

У меня есть приложение с несколькими арендаторами, где каждый арендатор может определить свой собственный ClientID, Authority и т. Д. Для WsFed или OpenIdConnect. Все жильцы зарегистрированы в OwinStartup, как показано ниже:Добавить Owin Pipeline Middleware после 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 без утилизации пула приложений?

+0

Интересные настройки. Мне тоже нужно что-то подобное. Не могли бы вы предоставить больше кода о 'context.Authentication.Challenge (AuthenticationType)'? Как код знает, что использовать «OpenIdConnectTenantOption»? – Martijn

ответ

8

IAppBuilder не существует после запуска, он используется для построения конвейера выполнения запроса и затем отбрасывается. Конвейер не был предназначен для модификации после запуска.

+0

Спасибо @Tratcher. Не хорошие новости. Есть ли способ сделать то, что мне нужно за пределами Startup? Или может быть изменен трубопровод выполнения запроса, хотя он и не предназначен? Могу ли я предоставить 'AuthenticationOptions' в' context.Authentication.Challenge (AuthenticationType) '? Как размещенное приложение принимает новых арендаторов, желающих использовать собственный сервер ADFS для аутентификации без изменения конвейера? Спасибо! – mgrowan

+0

Эти реализации не были предназначены для многопользовательской аренды. Вместо того, чтобы пытаться скомпоновать десятки компонентов с одним арендатором в ваше приложение, я предлагаю вам вместо этого развить код и построить ваши потребности в многоквартирных домах непосредственно в промежуточное ПО. Это должно позволить вам как добавлять, так и удалять арендаторов по требованию, не накапливая накладные расходы, когда так много компонентов проверяют каждый запрос. – Tratcher

+0

Спасибо @Tratcher. Я думал, что это может быть так, как нам нужно. Замечательно иметь подтверждение. Еще раз спасибо! – mgrowan

Смежные вопросы