我正在使用.net core 2应用程序,并设置了openIDConnect选项提示参数以在startup.cs
中configureservices方法中的同意.AddOpenIdConnect(options =>
{
options.prompt ="consent";
}
但是在初始登录页面中,我只想在没有同意屏幕的情况下使用提示="登录"。
在控制器页面中
return Challenge(
new AuthenticationProperties { RedirectUri =
Url.Action("Index") },
OpenIdConnectDefaults.AuthenticationScheme);
是否有任何方法可以将提示参数更改为从控制器"登录"。在上一个版本中,我们可以使用OwinContext进行此操作。
HttpContext.GetOwinContext().Environment.Add("Prompt","login");
任何帮助将不胜感激,谢谢。
您可以使用Items
属性传达任意参数:
var authenticationProperties = new AuthenticationProperties
{
RedirectUri = Url.Action("Index")
};
authenticationProperties.Items["prompt"] = "login";
return Challenge(
authenticationProperties,
OpenIdConnectDefaults.AuthenticationScheme);
然后您必须处理OnRedirectToIdentityProvider
事件,类似的事件:
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = context =>
{
if (context.Properties.Items.TryGetValue("prompt", out string prompt))
{
context.ProtocolMessage.Prompt = prompt;
}
return Task.CompletedTask;
}
};
如果给出了及时值,它在项目中查看,如果是的,则将现有值替换为。
在asp.net core 3.x中您可以使用:
设置提示选项.AddMyTestOpenIdConnect(options =>
{
options.Authority = "https://localhost:6001";
options.ClientId = "authcodeflowclient";
options.ClientSecret = "mysecret";
options.ResponseType = "code";
// stuff...
options.Prompt = "consent";
});