您可以使用
OnRedirectToIdentityProvider
财产
OpenIdConnectEvents
班级:
在重定向到身份提供程序进行身份验证之前调用。这可以用来设置协议消息状态将通过身份验证过程持久化。ProtocolMessage还可以用于添加或自定义发送给标识提供程序的参数。
AddOpenIdConnect
函数,在使用
services.AddAuthentication
在里面
Startup.ConfigureServices
. 下面是一个针对您的需求的示例:
services
.AddAuthentication(...)
.AddOpenIdConnect(options =>
{
...
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = ctx =>
{
if (ctx.HttpContext.Request.Query.TryGetValue("user", out var stringValues))
ctx.ProtocolMessage.LoginHint = stringValues[0];
return Task.CompletedTask;
}
};
});
其中大部分只是为上述事件添加身份验证、OIDC和注册事件处理程序的样板代码。最有趣的是:
if (ctx.HttpContext.Request.Query.TryGetValue("user", out var stringValues))
ctx.ProtocolMessage.LoginHint = stringValues[0];
Challenge
从你的问题得到行动
user
上面的代码从查询字符串参数中读取
用户
StringValues
这里)并将其设置为
LoginHint
财产,如果找到的话。
注意:我已经用
https://demo.identityserver.io
(这当然管用)。