Identityserver4和子域多租户

时间:2019-07-12 08:25:14

标签: c# asp.net identityserver4 openid-connect

我们正在尝试使用SSO对应用程序进行现代化改造,因此我们正在检查IdentityServer4。
我有两个环境在运行我们的Web应用程序。

天蓝色
(作为可扩展的应用程序服务运行)
https://cust1.mydomain.com
https://cust2.mydomain.com
https://cust3.mydomain.com

本地云提供商
(每个租户都有自己的文件夹并作为虚拟目录运行)
https://myotherdomain.com/cust4
https://myotherdomain.com/cust5
https://myotherdomain.com/cust6

在web.config中,有一个设置指定在Azure或本地云提供程序下运行。

由于我们必须同时支持这两种环境,所以我一直在考虑在客户端设置中传递租户信息。
这样,IdentityServer4将知道要检查用户凭据的租户数据库。

.AddOpenIdConnect(options =>
{
    options.ClientId = "testWebClient";
    options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    options.MetadataAddress = "https://idp.mydomain.com/.well-known/openid-configuration";
    options.ClientSecret = "secret";
    options.ResponseType = "code id_token";

    options.Events = new OpenIdConnectEvents
    {
        OnRedirectToIdentityProvider = (ctx) =>
        {
            // Based on a configuration in AppSettings, we will extract tenant from the subdomain or in the URL path
            string subdomain = ctx.Request.Host.Host.GetSubDomain(); // Custom extension that extracts the subdomain..
            ctx.ProtocolMessage.AcrValues = $"tenant:{subdomain}"; // becomes "tenant:cust1"
            return Task.CompletedTask;
        },
    };
});

问题是,我应该如何在idsvr中处理客户端?

  • 在集合中每个客户端的URL都包含一个RedirectUris和PostLogoutRedirectUris的客户端?这样做有没有“安全性”的含义?可能会发生租户泄漏?
  • 每个租户一个客户?如果是这样,那我将如何动态指定ClientId?

0 个答案:

没有答案