NET Core обратный прокси и промежуточное ПО аутентификации - PullRequest
0 голосов
/ 29 января 2020

У меня есть. Net Базовое приложение, размещенное в службе приложений Azure, с настраиваемым доменным именем, настроенным в обратном прокси-сервере Azure Front Door.

Реализована внешняя аутентификация (Facebook) и работает, когда я запускаю приложение локально и когда я получаю доступ к приложению на Azure напрямую через [app_name] .azurewebsites. net URL.

Однако при входе в систему через facebook возникает ошибка сервера при доступе к приложению из моего пользовательского домена или через [app_name] .azurefd. net.

Проблема заключается в том, что после авторизации пользователь перенаправляется обратно в домен службы приложения (.azurewebsites .net /) вместо пользовательского домена.

Я настроил перенаправленные заголовки в приложении, но, похоже, это не помогло.

 services.Configure<ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders =
                    ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedHost;
                options.ForwardedHostHeaderName = "X-Original-Host";
                options.KnownNetworks.Clear();
                options.KnownProxies.Clear();
            });

Мой код для входа генерируется по умолчанию NET Core:

<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
                        <div>
                            <p>
                                @foreach (var provider in Model.ExternalLogins)
                                {
                                    <button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
                                }
                            </p>
                        </div>
                    </form>

Похоже, отсутствует свойство Redirect_URI, которое я могу установить в параметрах промежуточного программного обеспечения Facebook.

tldr: my. net core external auth м iddleware перенаправляет на домен azure вместо моего пользовательского домена, даже если приложение доступно из пользовательского домена. Я переадресовал заголовки, настроенные в NET Core.

Обновление: отредактировано для ясности

Обновление2: также пробовали следующее безрезультатно:

app.Use(async (context, next) =>
            {
                if (context.Request.Headers.Any(x => x.Value == "X-Original-Host") != false)
                {
                    var originalHost = context.Request.Headers.FirstOrDefault(x => x.Value == "X-Original-Host").Value;
                    context.Request.Headers.Add("Host", originalHost);
                }
                await next.Invoke();
            });

1 Ответ

0 голосов
/ 31 января 2020

Та же проблема с перенаправлениями в Application Gateway по следующему вопросу: Перенаправление на абсолютный URL-адрес по таймауту в ASP. NET Приложение Core 2.0

Благодаря Tratcher за ответ на этот вопрос. Решением было добавить следующее в метод Configure файла Startup.cs:

app.Use((ctx, next) =>
{
    ctx.Request.Host = new HostString(options.Value.CustomDomain);
    return next();
});
...