Вход в Azure AD из цикла перенаправления приложений MVC - PullRequest
0 голосов
/ 10 июня 2019

Я прочитал много постов, и все сводятся к Cookies при аутентификации. Однако, когда я испытываю цикл перенаправления непосредственно после входа в систему, он выполняется для любого клиента, который входит в систему, а не только для определенных ПК.

Я перепробовал все, что мог, и могу опубликовать все, что сделал, но не понимаю, как это может быть проблемой с cookie, если это происходит со ВСЕМИ пользователями. Так что в один момент это работает, в следующий раз никто не может войти в систему из-за цикла перенаправления.

По логике это ДОЛЖНО быть как-то связано с куки-файлами аутентификации, но как это может повлиять на всех одновременно?

Разве это не то, что в Azure может вызывать проблемы? Кажется, это должно быть?

Буду очень признателен за любые идеи, так как сейчас я получаю много злости от своего клиента: (

Это мой startup.auth, если он вообще помогает

private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
        private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
        private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
        private static string redirectUri = ConfigurationManager.AppSettings["ida:RedirectUri"];
        private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];


        // Concatenate aadInstance, tenant to form authority value       
        private string authority = string.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

        // ConfigureAuth method  
        public void ConfigureAuth(IAppBuilder app)
        {
            app.CreatePerOwinContext(ApplicationDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            //app.UseCookieAuthentication(new CookieAuthenticationOptions());

            //Enable the application to use a cookie to store information for the signed in user

            //and to use a cookie to temporarily store information about a user logging in with a third party login provider

            //Configure the sign in cookie


            //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))
            //    },
            //    CookieSecure = CookieSecureOption.Always
            //});

            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                CookieName = "Local_Login",
                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))
                },
                //CookieManager = new SystemWebCookieManager(),
                SlidingExpiration = true
            });

            //app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
            app.UseCookieAuthentication(new CookieAuthenticationOptions());

            app.UseOpenIdConnectAuthentication(

                            new OpenIdConnectAuthenticationOptions
                            {
                                ClientId = clientId,
                                Authority = authority,
                                RedirectUri = redirectUri,
                                PostLogoutRedirectUri = postLogoutRedirectUri,
                                Notifications = new OpenIdConnectAuthenticationNotifications
                                {
                                    AuthenticationFailed = (context) =>
                                    {
                                        context.HandleResponse();
                                        context.OwinContext.Response.Redirect("/Account/Login");
                                        return Task.FromResult(0);
                                    }
                                }
                            });


        } // end - ConfigureAuth method  

1 Ответ

0 голосов
/ 14 июня 2019

Итак, после многих часов и нескольких поздних ночей, я наконец-то, кажется, нашел решение.

Итак, исходя из моего понимания, в какой-то момент файл cookie MVC (который я считаюapplication.cookie) и файл cookie Azure AD (который я считаю aspnet.cookie) удаляют друг друга из-за ошибки в Microsoft, которая не устранялась после многих лет возникновения этой проблемы.Итак, что происходит, вы выполнили вход в Azure AD, и файл cookie проверки подлинности сообщает, что вы прошли проверку подлинности, однако при попадании в контроллер файл cookie MVC (как было сказано в сообщении) сообщает, что вы не прошли проверку подлинности, поэтому перенаправляетвернитесь к входу в Azure AD, но увидите, что вы прошли аутентификацию через Azure AD, и поэтому бесконечный цикл продолжается.

Я видел, как многие люди обращались к Kentor Cookie Saver и помогали, один или два из которыхсказал, что это не так, но я решил попробовать, и у меня не было жалобы клиента в течение последних 2-3 дней, поэтому, должно быть, это сработало.

Вот ссылка, которую я использовал: Kentor Cookie Saver

Я надеюсь, что это помогает или ведет кого-то в правильном направлении.

Приветствия!

...