我们正在使用在docker容器内运行的dotnet核心构建一个Web应用程序 . 我们已经将应用程序放在IIS上的WS2016上,后者用作反向代理 . 在url rewrite模块的帮助下,传入我们的URL(www.myurl.com)的请求将使用容器名称作为主机名转发到相关的docker容器(在我们的例子中,我们称之为“web”) . 此设置适用于此处 .

但是,几天前我们需要添加Facebook oauth授权支持来注册系统并出现问题 . 我们按以下方式设置授权:

...
services.AddAuthentication().AddFacebook(o =>
{
    o.CallbackPath = new PathString("/account/facebookreturn");
    o.AppId = appSettings.FacebookLogin.AppId;
    o.AppSecret = appSettings.FacebookLogin.AppSecret;
})
...

我们的facebook身份验证挑战然后将用户重定向到facebook oauth页面,并使用以下重定向uri:https://www.facebook.com/v2.12/dialog/oauth......redirect_uri=http%3A%2F%2Fweb%2Faccount%2Ffacebookreturn&state= ....

如您所见, redirect_uri 具有docker容器的容器名称/主机名,而实际上应该是"www.myurl.com" .

我们尝试了几种解决方案,例如使用 x-forwarded 标头 . 使用 UseIISIntegration()UseUrls 似乎也没有用 . 我们在这里失踪了什么?我对IIS和Web Headers 没有多少经验,所以它可能相当明显,我很感激帮助 .