Аутентификация с помощью Azure AD redirect_uri неверна с использованием FrontDoor

У меня есть установка Azure FrontDoor в качестве обратного прокси-сервера / балансировщика нагрузки между контейнером, работающим на порту 5443, и личным доменом. Смысл этого в том, чтобы предоставить пользователям стандартный адрес. Т.е. container.azurecontainer.io:3443 указывает на https://oursite3.example.com.

Один и тот же aci запускает несколько контейнеров:


    container.azurecontainer.io:443
    container.azurecontainer.io:2443
    container.azurecontainer.io:3443


    https://oursite1.example.com
    https://oursite2.example.com
    https://oursite3.example.com 

(строка 116:  BuildRedirectUri

Затем у нас есть несколько aci, развернутых по всему миру в разных регионах (следовательно, мы используем Frontdoor для балансировки нагрузки между разными экземплярами).

В этом примере на container.azurecontainer.io:3443 установлена ​​аутентификация MS AD. При нажатии на ссылку пользователь перенаправляется на вход, создается ссылка, которая перенаправляет на нее браузер. В ссылке есть redirect_uri. Примерно так: https://login.microsoftonline.com/0000000000000000-0000-0000ua /authorize?client_id=00000000-0000-0000-0000-000000000002&redirect_uri=https%3A%2F%2Foursite3.example.com%3A3443%2Fsignin-oidc&response_type=id_token&scope=openid%20profile&response_modejcejdf-ali_modejdf-jdjdjdjdjdjdjdjdjdjp_postalks_modejdjdf_ljdjdjdjdjdjdjdjp_postalks_modejdf SKU = ID_NETSTANDARD2_0 & x-client-ver = 5.5.0.0

Однако при входе пользователь получает на сайте следующее:

AADSTS50011: URL-адрес ответа, указанный в запросе, не соответствует URL-адресам ответа, настроенным для приложения: '00000000-0000-0000-0000-000000000003'

Причина в том, что URL-адрес ответа приложения AD установлен на:

https://oursite3.example.com/signin-oidc

Однако при ближайшем рассмотрении URL-адрес, на который был перенаправлен пользователь для входа, включает это как redirect_uri:

https://oursite3.example.com:5443/signin-oidc

то есть порт 5443 был добавлен в конец имени хоста.

По сути, он включает базовый исходный порт в redirect_uri, чего я не ожидал.

Я пробовал использовать ForwardedOptions на нашем сайте. Например, в нашем файле startup.cs содержится следующее (ConfigureServices):

            services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders = ForwardedHeaders.XForwardedFor |
                                           ForwardedHeaders.XForwardedProto;
                // Only loopback proxies are allowed by default.
                // Clear that restriction because forwarders are enabled by explicit 
                // configuration.
                options.KnownNetworks.Clear();
                options.KnownProxies.Clear();
            });

а затем (Настроить):

             app.UseForwardedHeaders();

Это не решает проблему.

Я посмотрел, могу ли я переопределить значение, устанавливаемое для redirect_uri, посмотрев здесь: https://github.com/dotnet/aspnetcore/blob/b7e122fbac4207b003dc07f6101e50218be8ff21/src/Security/Authentication/Core/src/AuthenticationHandler.cs

Я также пробовал это: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.1#troubleshoot

и это:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.1#nginx-configuration

Кто-нибудь знает, что еще может быть не так?

Благодарность


person ossentoo    schedule 11.05.2020    source источник


Ответы (1)


Мы решили разделить контейнеры на разные экземпляры контейнеров. Обеспечивает простой дизайн.

person ossentoo    schedule 15.05.2020