【发布时间】:2015-05-11 09:11:50
【问题描述】:
我有一个多租户应用程序,每个租户都可以为 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);
...
}
它通过context.Authentication.Challenge(AuthenticationType) 切换要使用的 STS。这真的很好用。
问题是当新租户注册时,我如何访问IAppBuilder 并添加新的AuthenticationOptions 而无需应用程序池回收?
【问题讨论】:
-
有趣的设置。我也需要这样的东西。你能提供更多关于
context.Authentication.Challenge(AuthenticationType)的代码吗?代码如何知道使用哪个OpenIdConnectTenantOption?
标签: c# asp.net-mvc owin ws-federation openid-connect