Переопределение, куда перенаправляется обратный вызов sign-oidc после успешной аутентификации

#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 = "/") .