#asp.net #authentication #load-balancing #openid-connect
#asp.net #аутентификация #балансировка нагрузки #OpenID-подключение
Вопрос:
Я размещаю ASP.NET Ядро 2.x веб-приложение за балансировщиком нагрузки. Допустим, общедоступный URL- public_url.com
адрес. Внутренне приложение private_url.com/iis_sub_dir
включено.
Я мог бы выполнить эту настройку, добавив настраиваемое промежуточное ПО базового ПУТИ первым делом в конвейере.
Проблема: после входа в систему с использованием промежуточного программного обеспечения OpenIdConnect для внешнего поставщика он успешно возвращается к моему /signin-oidc
пути обратного вызова с кодом ответа 302, но заголовок ответа «местоположение» выглядит так: public_url.com/iis_sub_dir/etc
. Этот iis_sub_dir все разрушает, и я получаю 404.
Я попытался добавить другое пользовательское промежуточное программное обеспечение, но, похоже, этот запрос / ответ ему не передается!
Основная конфигурация:
.AddOpenIdConnect(options =>
{
options.Authority = xxx;
options.ClientId = xxx;
options.CallbackPath = "/signin-oidc";
options.CorrelationCookie.Path = "/"; // cookie load balancer fix
options.NonceCookie.Path = "/"; // cookie load balancer fix
options.ResponseType = "code";
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProvider = async (ctx) =>
{
ctx.ProtocolMessage.RedirectUri = publicPath CallbackPath;
await Task.FromResult(0);
},
Промежуточное программное обеспечение PathBase:
httpContext.Request.PathBase = new PathString(baseRedirectPath);
Я просто хочу удалить этот iis_sub_dir из заголовка ответа «местоположение» конечной точки обратного вызова.
Спасибо.
Комментарии:
1. Попробуйте это — параметры. Обратный путь = «/iis_sub_dir/signin-oidc»; Это должно сработать.
2. К сожалению, это не работает, все еще получая iis_sub_dir в заголовке location, от которого я хочу избавиться.
Ответ №1:
При использовании схемы аутентификации OpenID Connect используйте это RedirectUri
свойство.
await HttpContext.ChallengeAsync("OpenId-SchemeName",
new AuthenticationProperties() { RedirectUri = "http://public-url.com/iis_sub_dir/signin-oidc" });
Смотрите Документацию здесь — https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.authentication.authenticationproperties?view=aspnetcore-2.2
Комментарии:
1. Спасибо вам за это. У меня есть returnUrl в качестве параметра для моего действия входа в систему следующим образом:
public async Task Login(string returnUrl)
. Работает нормально, когда вы фактически передаете returnUrl, но застревает в цикле перенаправления, если вы этого не сделаете. Изменил его наpublic async Task Login(string returnUrl = "/")
.