C# 向IdentityServer 4身份验证请求添加自定义参数

C# 向IdentityServer 4身份验证请求添加自定义参数,c#,asp.net-core,identityserver4,C#,Asp.net Core,Identityserver4,是否有任何方法向identityserver身份验证请求添加自定义参数。我试过这样做。但它将添加返回URL的参数,而不是作为身份验证请求查询字符串 Events = new OpenIdConnectEvents { OnRedirectToIdentityProvider = context => { if (context.Properties.Items.ContainsKey("connection"))

是否有任何方法向identityserver身份验证请求添加自定义参数。我试过这样做。但它将添加返回URL的参数,而不是作为身份验证请求查询字符串

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

            return Task.FromResult(0);
        }
    }

但是我需要在请求URL上设置这些参数,而不是返回URL的参数。

请求URL如下所示:

https://login.dev.domain.com/connect/authorize?client_id=657ce44e-10a2-4b66-9078-7f1acf92811f&redirect_uri=https%3A%2F%2Fmyapp.dev.domain.com%2Fsignin-oidc&response_type=code&scope=openid%20email&response_mode=form_post&nonce=636888568253105245.ODY4MzNjNGMtZDQxYi00YTkzLTg5OTctNTJkZGRjM2IwNGRjMjEwMWEzZGQtYWY1Mi00ODQ0LWE0ZGYtZTAxOWU0YjQyODkz&ui_locales=en&state=CfDJ8F-9xHJQT19NjH-KMvnd4SnuYPsaINrq_yn6DAfN8Y6h5aHBoukF0TPqZHOYk0mroCw4tz-03ajp6cgaomZ8HnrE6Or6ZzzNdfUqzDpDNH4VwWCax8JwtsRreob9j-nsOnttzDkRVTCzVEjjHpR__OR498c-kVXf-RjudGPghE0K&x-client-SKU=ID_NETSTANDARD1_4&x-client-ver=5.2.0.0
其中,在我的例子中,
ui\u locales=en
是我的自定义参数。它不是
重定向uri
的一部分,只是另一个查询参数,由
符号分隔。当您需要将一些数据传递给您的IdP时,这种方法就可以工作了。当您只需要在请求过程中保留一些数据并通过授权响应将其取回时,您可以使用State预定义参数。

services.AddAuthentication().AddOpenIdConnect(Constants.MyIdpName, Constants.MyIdpName, options => {
***           
options.Events = new OpenIdConnectEvents {
     OnRedirectToIdentityProvider = ctx => {
          var rcf = ctx.HttpContext.Features.Get<IRequestCultureFeature>();
              if (rcf.Provider != null) {
                    string lng = rcf.RequestCulture.Culture.TwoLetterISOLanguageName;
                    ctx.ProtocolMessage.Parameters.Add("ui_locales", lng == "nn" || lng == "nb" ? "no" : lng);
              }
              return Task.CompletedTask;
          }
     }
}
services.AddAuthentication().AddOpenIdConnect(Constants.MyIdpName,Constants.MyIdpName,options=>{
***           
options.Events=新的OpenIdConnectEvents{
OnRedirectToIdentityProvider=ctx=>{
var rcf=ctx.HttpContext.Features.Get();
if(rcf.Provider!=null){
字符串lng=rcf.RequestCulture.Culture.TwoLetterIsLanguageName;
添加(“ui_locales”,lng==“nn”| lng==“nb”?“no”:lng);
}
返回Task.CompletedTask;
}
}
}

请求url如下所示:

https://login.dev.domain.com/connect/authorize?client_id=657ce44e-10a2-4b66-9078-7f1acf92811f&redirect_uri=https%3A%2F%2Fmyapp.dev.domain.com%2Fsignin-oidc&response_type=code&scope=openid%20email&response_mode=form_post&nonce=636888568253105245.ODY4MzNjNGMtZDQxYi00YTkzLTg5OTctNTJkZGRjM2IwNGRjMjEwMWEzZGQtYWY1Mi00ODQ0LWE0ZGYtZTAxOWU0YjQyODkz&ui_locales=en&state=CfDJ8F-9xHJQT19NjH-KMvnd4SnuYPsaINrq_yn6DAfN8Y6h5aHBoukF0TPqZHOYk0mroCw4tz-03ajp6cgaomZ8HnrE6Or6ZzzNdfUqzDpDNH4VwWCax8JwtsRreob9j-nsOnttzDkRVTCzVEjjHpR__OR498c-kVXf-RjudGPghE0K&x-client-SKU=ID_NETSTANDARD1_4&x-client-ver=5.2.0.0
其中,在我的例子中,
ui\u locales=en
是我的自定义参数。它不是
redirect\u uri
的一部分,只是另外一个查询参数,由
&
符号分隔。当您需要将一些数据传递给IdP时,该参数起作用。当您只需要在请求期间保留一些数据并通过授权响应将其取回时,您可以包含状态预定义参数。

services.AddAuthentication().AddOpenIdConnect(Constants.MyIdpName, Constants.MyIdpName, options => {
***           
options.Events = new OpenIdConnectEvents {
     OnRedirectToIdentityProvider = ctx => {
          var rcf = ctx.HttpContext.Features.Get<IRequestCultureFeature>();
              if (rcf.Provider != null) {
                    string lng = rcf.RequestCulture.Culture.TwoLetterISOLanguageName;
                    ctx.ProtocolMessage.Parameters.Add("ui_locales", lng == "nn" || lng == "nb" ? "no" : lng);
              }
              return Task.CompletedTask;
          }
     }
}
services.AddAuthentication().AddOpenIdConnect(Constants.MyIdpName,Constants.MyIdpName,options=>{
***           
options.Events=新的OpenIdConnectEvents{
OnRedirectToIdentityProvider=ctx=>{
var rcf=ctx.HttpContext.Features.Get();
if(rcf.Provider!=null){
字符串lng=rcf.RequestCulture.Culture.TwoLetterIsLanguageName;
添加(“ui_locales”,lng==“nn”| lng==“nb”?“no”:lng);
}
返回Task.CompletedTask;
}
}
}

添加了一些,但看起来很像您的系统只是添加了参数来重定向Url而不是查询字符串参数否,我的示例Url演示了:)或者,您的意思对我来说是隐藏的?什么是“查询字符串”你想修改吗?添加了一些,但看起来很像你的意思,只是添加了一些参数来重定向Url而不是查询字符串paramsno,我的示例Url演示了:)或者,也许你是指对我隐藏的东西?您希望修改的“查询字符串”是什么?