我有一个 Azure FrontDoor 设置作为在端口 5443 上运行的容器和自定义域之间的反向代理/负载均衡器。这样做的目的是为用户提供一个标准的地址。 IE。 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
(line 116:
然后,我们在全球不同区域部署了多个 aci(因此使用 Frontdoor 在不同实例之间进行负载平衡)。
在此示例中,container.azurecontainer.io:3443 安装了 MS AD 身份验证。单击链接后,用户会重定向到登录,并生成一个链接并将浏览器重定向到该链接。该链接中包含redirect_uri。就像是:alskdjflkjalksdfjalkjA&x-client-SKU=ID_NETSTANDARD2_0&x-client-ver=5.5.0.0
但是,登录后,用户会在网站上看到以下内容:
AADSTS50011:请求中指定的回复 URL 与为应用程序配置的回复 URL 不匹配:“00000000-0000-0000-0000-000000000003”
原因是 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();
这并不能解决问题。
我查看了是否可以通过查看此处来覆盖设置为redirect_uri 的值:https://github.com/dotnet/aspnetcore/blob/b7e122fbac4207b003dc07f6101e50218be8ff21/src/Security/Authentication/Core/src/AuthenticationHandler.cs
我也尝试过这个:https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.1#troubleshoot
和这个:
https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.1#nginx-configuration
有人知道还有什么可能是错的吗?
thanks