将自定义参数添加到IdentityServer4身份验证请求

时间:2019-03-21 11:19:20

标签: c# asp.net-core identityserver4

是否可以将自定义参数添加到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的参数。

1 个答案:

答案 0 :(得分:0)

请求网址如下:

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_locales=en是我的自定义参数。它不是redirect_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;
          }
     }
}