Asp.net core 如何将ui_区域设置传递回请求的客户端?
授权请求完成后,如何将ui_区域设置从IdentityServer传递给客户端 我在不同的域下有多个应用程序+Idsv4(我们无法共享cookie)。例如: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,并在登录屏幕上显示正确的翻译文本 用户输入用户凭据,成功并
- 用户转到MvcApp1并更改屏幕上的UiLocales(例如,es)。我在cookies中存储了ui文化
- 然后他们单击login,授权请求被发送到带有
ui\u区域设置的Idsv4
- Idsv4接收
,并在登录屏幕上显示正确的翻译文本ui\u locales
- 用户输入用户凭据,成功并返回到重定向URI
- App1仍然可以显示正确的文本,因为它将区域设置存储在cookie中
- 当用户导航到App2并发出授权请求时,Idsv4不会返回正确的区域设置
- 因此,App2在成功授权后始终显示英文文本
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
。