.net core IdentityServer4在登录后重定向到不同的客户端

.net core IdentityServer4在登录后重定向到不同的客户端,.net-core,identityserver4,multi-tenant,blazor-webassembly,.net Core,Identityserver4,Multi Tenant,Blazor Webassembly,我正在启动一个新项目,并使用IS4进行身份验证。 该应用程序将有一个客户端和API,分布在多个区域。 用户将为其配置文件分配一个区域,以便在登录后可以重定向到其区域URL(可能由子域定义),如何实现这一点 e、 g.用户导航到并被请求登录。 在登录过程中,用户定义了一个区域,例如英国。 用户已通过身份验证,现在我需要将其重定向到将托管在上的客户机。根据OIdC规范,身份提供商必须在交互式登录后将用户重定向到授权请求提供的有效URL。然而,我认为至少有两种方法可以在不改变身份的情况下解决需求 两者

我正在启动一个新项目,并使用IS4进行身份验证。 该应用程序将有一个客户端和API,分布在多个区域。 用户将为其配置文件分配一个区域,以便在登录后可以重定向到其区域URL(可能由子域定义),如何实现这一点

e、 g.用户导航到并被请求登录。 在登录过程中,用户定义了一个区域,例如英国。
用户已通过身份验证,现在我需要将其重定向到将托管在

上的客户机。根据OIdC规范,身份提供商必须在交互式登录后将用户重定向到授权请求提供的有效URL。然而,我认为至少有两种方法可以在不改变身份的情况下解决需求

两者都需要在主站点上进行一些工作,
您可以调整
OnTicketReceived
处理,使其基于某些声明而不是用户最初请求的路径重定向到本地站点。
这可能看起来像:

services.AddAuthentication().AddOpenIdConnect(选项=>
{
options.Events=新的OpenIdConnectEvents
{
OnTicketReceived=ctx=>
{
var identity=context.Principal.identity作为索赔实体;
var locale=identity?声明。
FirstOrDefault(x=>x.Type==JwtClaimTypes.Locale)?.Value??“en GB”;
开关(区域设置)
{
“如如”案:
ctx.ReturnUri=”http://ru.example.com"; 
//或者只是example.ru,没关系
打破
违约:
ctx.ReturnUri=”http://uk.example.com"; 
打破
}
返回Task.CompletedTask;
}
}
}
在这里,我们面临两种选择:

  • 将每个本地站点注册为一个单独的OIdC客户端,以便它们作为普通的SSO解决方案执行,其中卫星站点甚至可以单独托管
  • 或在所有本地站点之间共享身份验证cookie,如中所述。在这种情况下,您必须控制所有站点

为什么不将重定向角色留给example.com本身呢?这可能会更简单,而且不会破坏协议。如果这种方法可以接受,我可以详细解释我确实想到过,但不确定cookie是否仍然有效?类似?看起来很有希望,我明天会看一看,然后让你知道。你有什么建议吗可能是这样的例子吗?因为也可能是用户直接进入uk.example.com,然后被重定向到登录。但我想我最大的问题是,在初次登录后如何重定向