使用FrontDoor对Azure AD redirect_uri进行身份验证不正确

时间:2020-05-11 15:45:19

标签: asp.net-core azure-container-instances azure-front-door

我有一个Azure FrontDoor设置,作为在端口5443上运行的容器和自定义域之间的反向代理/负载平衡器。这样做的目的是为用户提供标准地址。即https://oursite3.example.com指向container.azurecontainer.io:3443。

同一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/00000000-0000-0000-0000-000000000001/oauth2/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_mode=form_post&nonce=jkalksdfj alskdjflkjalksdfjalkjA&x-client-SKU = ID_NETSTANDARD2_0&x-client-ver = 5.5.0.0

但是,登录后,用户会在网站上获得以下内容:

AADSTS50011:请求中指定的回复URL与为应用程序配置的回复URL不匹配:'00000000-0000-0000-0000-00000000000000003'

其原因是AD应用程序的答复URL设置为:

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();

这不能解决问题。

我看了看是否可以覆盖https://github.com/dotnet/aspnetcore/blob/b7e122fbac4207b003dc07f6101e50218be8ff21/src/Security/Authentication/Core/src/AuthenticationHandler.cs

来覆盖设置为redirect_uri的值

我也尝试过这样做: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

有人知道还有什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我们已决定将容器分成不同的容器实例。设计简单。