Identityserver4 根据客户端定制的登录页面

Identityserver4 根据客户端定制的登录页面,identityserver4,Identityserver4,我想让登录页面知道哪个客户端请求登录,以便显示一些特定于客户端的品牌:否则,用户可能会困惑,为什么他会重定向到另一个域上的这个外国登录页面。一个客户标志将有助于让他确信自己仍在正确的轨道上 获取这些信息最合理的方法是什么 编辑:请注意,通过“客户端”,我指的是代表其进行身份验证的客户端web应用程序,而不是用户的浏览器。所有客户端都在我的控制之下,因此我只使用隐式工作流 为了更清楚地说明这一点:我有客户端web应用程序A和B,以及identity server I。当用户代表B访问I时,B徽标应

我想让登录页面知道哪个客户端请求登录,以便显示一些特定于客户端的品牌:否则,用户可能会困惑,为什么他会重定向到另一个域上的这个外国登录页面。一个客户标志将有助于让他确信自己仍在正确的轨道上

获取这些信息最合理的方法是什么

编辑:请注意,通过“客户端”,我指的是代表其进行身份验证的客户端web应用程序,而不是用户的浏览器。所有客户端都在我的控制之下,因此我只使用隐式工作流

为了更清楚地说明这一点:我有客户端web应用程序A和B,以及identity server I。当用户代表B访问I时,B徽标应该会出现,因为我们不再在B的域中,这可能会令人困惑,但至少不会显示与B相关的品牌。

一些理论 从
IdSrv 4
获取
ClientId
的最简单方法是通过名为
IIdentityServerInteractionService
的服务,该服务在帐户控制器中用于获取
AuthorizationContext
。然后使用
IClientStore
服务跟进,该服务允许您根据
ClientId
获取客户端详细信息。获得这些详细信息后,只需将这些信息发送到视图进行布局。IdSrv 4中的客户机模型具有LogoUri属性,您可以利用该属性在每个客户机登录时显示图像

简单例子
//获取:/Account/Login
[HttpGet]
[异名]
公共异步任务登录(字符串returnUrl=null)
{
var context=wait_interaction.GetAuthorizationContextAsync(returnUrl);
if(上下文?.IdP!=null)
//如果IdP通过,则旁路显示登录屏幕
returnexternallogin(context.IdP,returnUrl);
if(上下文!=null)
{
var currentClient=wait_clientStore.findclientbydasync(context.ClientId);
如果(currentClient!=null)
{
ViewData[“ClientName”]=currentClient.ClientName;
ViewData[“LogoUri”]=currentClient.LogoUri;
}
}
ViewData[“ReturnUrl”]=ReturnUrl;
返回视图();
}

我对此不太满意,但为某些客户定制url是否可行?Ip的etc很容易被欺骗,从而confusion@Tomm我想我可以说得更清楚一些:这里的客户机是“oauth客户机”,即一个web应用程序——请参阅我的编辑。
    // 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();
    }