ASP.Net Идентификация с episerver не работает при развертывании

В настоящее время я работаю над сайтом, использующим EpiServer CMS 8 и заменяющим имя входа на Owin/ASP.Net Identity.

На локальном IIS все работает нормально, но при развертывании на нашем тестовом сервере переход к / episerver / не перенаправляет на страницу входа в систему, но напрямую дает несанкционированный результат 401.2.

Ниже мой стартап класс

[assembly: OwinStartup(typeof(Website.Startup))]
namespace Website
{
    public class Startup
    {
        private const string PathRoot = "~/";
        private const string LogoutUrl = "/Account/Logout";
        private const string LoginUrl = "/Account/Login";
        private const string BackendLoginUrl = "~/BackendAccount/";
        private const string BackendLogoutUrl = "~/Util/Logout.aspx";

        public void ConfigureAuth(IAppBuilder app)
        {
            Configuration(app);
        }
        public void Configuration(IAppBuilder app)
        {
            app.CreatePerOwinContext(ApplicationDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString(VirtualPathUtility.ToAbsolute(LoginUrl)),
                Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
                    OnApplyRedirect = ApplyRedirect
                }
            }, PipelineStage.Authenticate);

          app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            app.Map(VirtualPathUtility.ToAbsolute(LogoutUrl), map =>
            {
                map.Run(ctx =>
                {
                    ctx.Authentication.SignOut();
                    return Task.Run(() => ctx.Response.Redirect(VirtualPathUtility.ToAbsolute(PathRoot)));
                });
            });

            app.Map(VirtualPathUtility.ToAbsolute(BackendLogoutUrl), map =>
            {
                map.Run(ctx =>
                {
                    ctx.Authentication.SignOut();
                    return Task.Run(() => ctx.Response.Redirect(VirtualPathUtility.ToAbsolute(PathRoot)));
                });
            });
            app.UseStageMarker(PipelineStage.MapHandler);
        }
        private static void ApplyRedirect(CookieApplyRedirectContext context)
        {
            string backendPath = Paths.ProtectedRootPath.TrimEnd('/');

            if (context.Request.Uri.AbsolutePath.StartsWith(backendPath, StringComparison.CurrentCultureIgnoreCase) && !context.Request.User.Identity.IsAuthenticated)
            {
                context.RedirectUri = VirtualPathUtility.ToAbsolute(BackendLoginUrl) +
                        new QueryString(
                            context.Options.ReturnUrlParameter,
                            context.Request.Uri.AbsoluteUri);
            }

            context.Response.Redirect(context.RedirectUri);
        }
    }
}

Мой web.config включает эти разделы

<authentication mode="None">
</authentication>
<membership defaultProvider="OwinMembershipProvider" userIsOnlineTimeWindow="10" hashAlgorithmType="HMACSHA512">
  <providers>
    <clear /
    <add name="OwinMembershipProvider"
         type="Website.Shared.Providers.OwinMembershipProvider"
         enablePasswordRetrival="false"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="false"
         requiresUniqueEmail="false"
         passwordFormat="Hashed"
         passwordStrengthRegularExpression=""
         minRequiredPasswordLength="6"
         minRequiredNonalphanumericCharacters="0"
         connectionString="TestConnection"
         />
      </providers>
</membership>
<roleManager enabled="true" defaultProvider="OwinRoleProvider" cacheRolesInCookie="true">
  <providers>
    <clear />
    <add name="OwinRoleProvider" type="Website.Shared.Providers.OwinRoleProvider"/>
  </providers>
</roleManager>

Я попытался сравнить настройки iis между серверами, и я не могу найти никакой разницы. Я действительно понятия не имею, как решить эту проблему, и я попробовал все, что перечислено в руководстве по Оуэну для обработки запуска. OwinMembershipProvder и OwinRoleProvider основаны на коде http://www.mogul.com/om-mogul/blogg/owin-membership-and-role-provider-for-episerver но расширены и изменены в соответствии с нашими требованиями.

1 ответ

Решение

Решил это, сначала очистив временные файлы ASP.Net, а затем перезапустив сайт с web.config, установленным как

<add key="owin:AutomaticAppStartup" value="true" />
<add key="owin:AppStartup" value="Website.Startup" />

Ранее я проверил то, что, как мне казалось, было все возможные комбинации этих двух значений без успеха.

Я не могу сказать наверняка, но комбинация очистки кэша и удаления имени сборки из ключа AppStartup, возможно, была решением.

Другие вопросы по тегам