Asp.net core 如何将ui_区域设置传递回请求的客户端?

Asp.net core 如何将ui_区域设置传递回请求的客户端?,asp.net-core,localization,identityserver4,Asp.net Core,Localization,Identityserver4,授权请求完成后,如何将ui_区域设置从IdentityServer传递给客户端 我在不同的域下有多个应用程序+Idsv4(我们无法共享cookie)。例如: Mvc App1(主登陆网站) Mvc应用程序2 身份服务器 用户转到MvcApp1并更改屏幕上的UiLocales(例如,es)。我在cookies中存储了ui文化 然后他们单击login,授权请求被发送到带有ui\u区域设置的Idsv4 Idsv4接收ui\u locales,并在登录屏幕上显示正确的翻译文本 用户输入用户凭据,成功并

授权请求完成后,如何将ui_区域设置从IdentityServer传递给客户端

我在不同的域下有多个应用程序+Idsv4(我们无法共享cookie)。例如:

  • Mvc App1(主登陆网站)
  • Mvc应用程序2
  • 身份服务器
    • 用户转到MvcApp1并更改屏幕上的UiLocales(例如,es)。我在cookies中存储了ui文化
    • 然后他们单击login,授权请求被发送到带有
      ui\u区域设置的Idsv4
    • Idsv4接收
      ui\u locales
      ,并在登录屏幕上显示正确的翻译文本
    • 用户输入用户凭据,成功并返回到重定向URI
    • App1仍然可以显示正确的文本,因为它将区域设置存储在cookie中
    • 当用户导航到App2并发出授权请求时,Idsv4不会返回正确的区域设置
    • 因此,App2在成功授权后始终显示英文文本
    问题是,我可以设法在主应用程序和idsv4之间传递区域设置信息,以便在这两个应用程序中显示正确的本地化文本。但当用户导航到第二个应用程序(我们有5个以上的应用程序链接到idsv4)时,它总是返回到英文文本

    请参见下面的序列图:

    如上所述,由于Idsv4不返回
    ui\u locales
    信息(即使它自己显示正确的翻译文本),第二个应用程序无法检测要显示的语言,并返回默认语言-英语

    我在App1的Startup.cs中传递了每个追随者的区域性信息。但是
    OnAuthorizationCodeReceived
    事件上的
    ctx.ProtocolMessage.UiLocales
    始终为空

    options.Events = new OpenIdConnectEvents
    {
        OnRedirectToIdentityProvider = ctx =>
        {
            ctx.ProtocolMessage.UiLocales = Thread.CurrentThread.CurrentUICulture.Name;
            return Task.CompletedTask;
        },
        OnAuthorizationCodeReceived = ctx =>
        {
            Console.WriteLine("OnAuthorizationCodeReceived");
            return Task.CompletedTask;
        },
        ....
    }
    
    因此,我想知道在Idsv4中成功授权后,是否仍有必要嵌入
    ui\u locales

    或者Idsv4不是这样做的,因为它不是身份验证服务的责任

    当用户导航到其他应用程序以解决此问题时,我是否必须传递区域设置信息?
    示例:


    您能提供帮助吗?

    IdentityServer不会将任何信息发送回客户端,因此最好的解决方案可能是添加一个声明,告知登录时使用了哪个语言环境

    请注意,令牌确实包含有关登录过程的其他信息,例如使用的流程:
    “amr”=[“pwd”]

    可用于限制客户端访问权限的信息,例如需要2FA


    由于只有在成功登录后才调用
    OnAuthorizationCodeReceived
    ,因此您可以在该位置阅读声明,并使用声明根据IdentityServer中的用户区域设置相应的区域设置。

    FYI:我使用
    state
    传输此信息。但感谢您确认Idsrv不会返回区域设置数据。如果返回的对象总是空的,它们应该在返回的对象中隐藏
    ui\u locales