我想让登录页面知道哪个客户端请求登录以显示一些特定于客户端的品牌:否则用户可能会对为什么他被重定向到不同域上的该外部登录页面感到困惑.客户徽标将有助于向他保证他仍然在正确的轨道上.
获取该信息的最合理方法是什么?
编辑:请注意,"客户端"我指的是代表其发生身份验证的客户端Web应用程序 - 而不是用户的浏览器.所有客户都在我的控制之下,因此我只使用隐式工作流程.
为了使这一点更加清晰:我有客户端网络应用程序A和B,以及身份服务器I.当用户代表B来到我身边时,B徽标应该出现,因为我们不再在B的域上,这可能如果没有至少展示与B相关的品牌,就会感到困惑.
得到的最简单的方法ClientId,从IdSrv 4是通过所谓的服务IIdentityServerInteractionService这是在账户控制器用来获取AuthorizationContext.然后使用IClientStore允许您获取客户端详细信息的服务进行跟进ClientId.获得这些详细信息之后,只需将该信息发送到视图以进行布局.IdSrv 4中的客户端模型具有LogoUri属性,您可以使用该属性在每个客户端登录时显示图像.
// GET: /Account/Login
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> Login(string returnUrl = null)
{
var context = await _interaction.GetAuthorizationContextAsync(returnUrl);
if (context?.IdP != null)
// if IdP is passed, then bypass showing the login screen
return ExternalLogin(context.IdP, returnUrl);
if(context != null)
{
var currentClient = await _clientStore.FindClientByIdAsync(context.ClientId);
if (currentClient != null)
{
ViewData["ClientName"] = currentClient.ClientName;
ViewData["LogoUri"] = currentClient.LogoUri;
}
}
ViewData["ReturnUrl"] = returnUrl;
return View();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |