Приложение ASP.NET MVC за обратным прокси-сервером - использование неверного имени хоста после аутентификации - PullRequest
0 голосов
/ 22 мая 2018

У меня есть приложение ASP.NET MVC, использующее аутентификацию OWIN, которое работает за обратным прокси-сервером.

Аутентификация в ASP.NET настроена следующим образом:

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,

            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                // Enables the application to validate the security stamp when the user logs in.
                // This is a security feature which is used when you change a password or add an external login to your account.  
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });

Обратный прокси-сервер в iis настраивается следующим образом в файле web.config:

<system.webServer>
<httpErrors errorMode="Detailed" />
<asp scriptErrorSentToBrowser="true"/>
    <rewrite>
            <rule name="proxy" stopProcessing="true">
                <match url="^app/?(.*)" />
                <serverVariables>
                    <set name="X_REQUESTED_URL_PATH" value="{R:1}" />
                </serverVariables>
                <action type="Rewrite" url="https://myapp.mydomain.toplevel/app/{R:1}" />
            </rule>
    </rewrite>
<system.webServer>

Обратный прокси-сервер размещен на https://www.mydomain.toplevel/app/{R:1}

Все работает нормально, RedirectToAction будет перенаправлять на www.mydomain.toplevel.

Но когда я пытаюсь открыть контроллер с атрибутом AuthenticationAttribute, перенаправление переходит на https://myapp.mydomain.toplevel/account/login вместо www.mydomain.toplevel

Как я могу настроить эточто мое приложение остается за обратным прокси, даже когда происходит перенаправление аутентификации?В качестве первого обходного пути я попытался жестко закодировать LoginPath с именем хоста впереди, но это даст ошибку, что путь должен начинаться с /.

1 Ответ

0 голосов
/ 23 июня 2018

Оказывается, это довольно легко исправить.Я только что реализовал свой собственный метод OnApplyRedirect на AuthenticationProvider:

var provider = new CookieAuthenticationProvider
{
    // ..
};

provider.OnApplyRedirect = context =>
{
    UrlHelper _url = new UrlHelper(System.Web.HttpContext.Current.Request.RequestContext);
    String actionUri = _url.Action("Login", "Account", new { ReturnUrl = context.Request.Uri.PathAndQuery });
    context.Response.Redirect(actionUri);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...