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