gpt4 book ai didi

asp.net-mvc - Identity Server 4 将参数添加到登录页面

转载 作者:行者123 更新时间:2023-12-05 02:52:38 35 4
gpt4 key购买 nike

当用户需要进行身份验证时,我需要从我的 MVC 客户端向我的 Identity Server 4 UI 发送一个额外的参数。我试过关注 these two我发现的文章解释了这个看起来很简单的概念,但是我尝试使用参数的任何一种方法似乎都作为参数添加到 returnUrl 参数而不是 Login 上的命名参数 端点。

MVC Controller

[AllowAnonymous]
public IActionResult Register()
{
var properties = new AuthenticationProperties() { RedirectUri = "/" };

var connection = "YEPPERS";
if (!string.IsNullOrEmpty(connection))
{
properties.Items.Add("connection", connection);
}

return new ChallengeResult("OpenIdConnect", properties);
}

MVC 设置.cs

.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
// SNIP OIDC SETTINGS

options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = context =>
{
if (context.Properties.Items.ContainsKey("connection"))
{
context.ProtocolMessage.SetParameter("connection",
context.Properties.Items["connection"]);
}

return Task.FromResult(0);
}
};
});

Identity Server 4 用户界面 Controller

[HttpGet]
public async Task<IActionResult> Login(string returnUrl, string connection)
{
var vm = await BuildLoginViewModelAsync(returnUrl);

return View(vm);
}

来自端点上方的returnUrl参数

enter image description here

如您所见,添加的参数(连接)在 returnUrl 参数中,而不是像我之前认为的那样填充 connection 参数提到的文章。

最佳答案

为什么解析 returnUrl 似乎不正确? BuildLoginViewModelAsync 做的第一件事是解析 returnUrl 以获得一些上下文。

private async Task<LoginViewModel> BuildLoginViewModelAsync(string returnUrl)
{
var context = await _interaction.GetAuthorizationContextAsync(returnUrl);

您所要做的就是使用 Connection 属性扩展 LoginViewModel 并从参数中获取值:

var vm = new LoginViewModel
{
EnableLocalLogin = local,
ReturnUrl = returnUrl,
Username = context?.LoginHint,
Connection = context?.Parameters["connection"],
};

关于asp.net-mvc - Identity Server 4 将参数添加到登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62543216/

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