如何在.net core 2应用程序中设置OpenIdConnect选项提示= 从控制器"login"?



我正在使用.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";
});

最新更新