gpt4 book ai didi

identityserver4 - 根据客户定制的登录页面

转载 作者:行者123 更新时间:2023-12-01 10:25:22 28 4
gpt4 key购买 nike

我想让登录页面知道哪个客户端请求登录以显示一些特定于客户端的品牌:否则用户可能会混淆为什么他被重定向到不同域上的这个外国登录页面。客户 Logo 将有助于让他放心,他仍然在正确的轨道上。

获取该信息的最合理方法是什么?

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

为了更清楚地说明这一点:我有客户端 Web 应用程序 A 和 B,以及身份服务器 I。当用户代表 B 访问 I 时,应该会出现 B Logo ,因为我们不再位于 B 的域中如果至少不显示与 B 相关的品牌,这可能会造成混淆。

最佳答案

一些理论

IdSrv 4 获取 ClientId 的最简单方法是通过名为 IIdentityServerInteractionService 的服务,该服务在 Account Controller 中用于获取授权上下文。然后使用 IClientStore 服务跟进,该服务允许您获取给定 ClientId 的客户端详细信息。获得这些详细信息后,只需将该信息发送到 View 进行布局即可。 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();
}

关于identityserver4 - 根据客户定制的登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47794854/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com