身份服务器4登录后重定向到不同的客户端 [英] IdentityServer4 Redirect to different client after login

查看:23
本文介绍了身份服务器4登录后重定向到不同的客户端的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在启动一个新项目,并使用IS4进行身份验证。 该应用程序将具有跨多个地区分布的单一客户端和API。 用户将有一个区域分配给他们的个人资料,这样他们登录后可以被重定向到他们的区域URL(可能由子域定义),如何实现这一点?

例如,用户导航到https://example.com并被请求登录。 在登录过程中,用户定义了一个区域,例如联合王国。 用户已通过身份验证,现在我需要将他们重定向到将在https://uk.example.com上托管的客户端

推荐答案

根据OIdC规范,身份提供者必须在交互登录后将用户重定向到授权请求提供的有效URL。然而,我认为至少有两个选项可以在不对身份端进行任何更改的情况下解决要求。

两者都需要在主站点上执行一些工作,http://example.com 您可以调整OnTicketReceived处理,使其根据某个声明重定向到本地站点,而不是用户最初请求的路径。
它可能如下所示:

services.AddAuthentication().AddOpenIdConnect(options =>
{
  options.Events = new OpenIdConnectEvents
  {
    OnTicketReceived = ctx =>
    {
      var identity = context.Principal.Identity as ClaimsIdentity;
      var locale = identity?.Claims.
        FirstOrDefault(x => x.Type == JwtClaimTypes.Locale)?.Value??"en-GB";
      switch (locale)
      {
        case "ru-RU":
          ctx.ReturnUri = "http://ru.example.com"; 
          //or just example.ru, doesn't matter
          break;
        default:
          ctx.ReturnUri = "http://uk.example.com"; 
          break;
      }
      return Task.CompletedTask;
    }
  }
}

这里我们面临两种选择:

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

这篇关于身份服务器4登录后重定向到不同的客户端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆