У меня есть приложение 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 с именем хоста впереди, но это даст ошибку, что путь должен начинаться с /.