我们正在尝试使用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中处理客户端?