Azure Проблема аутентификации AD OpenIdConnect - случайные сбои при вызовах Ajax Jquery - PullRequest
0 голосов
/ 24 апреля 2020

Вот мой сценарий, может кто-нибудь, пожалуйста, помогите мне. У нас есть существующее приложение MVC5 Intr anet, размещенное в OnPrem DD C. Я пытаюсь реализовать Azure OpenIdAuthentication, которая аутентифицирует пользователей по Azure AD с учетными данными windows и извлекает заявки. И аутентификация, и авторизация работают нормально, но если вызов сделан с Ajax Jquery, я вижу случайные сбои, когда у меня есть более одного сервера за балансировщиком нагрузки F5. Если у меня есть только один сервер за F5 LB, он работает нормально все время, даже для вызовов Ajax, но когда я добавляю другой сервер, это не удается. Если я перефразирую sh, то страница работает нормально в течение некоторого времени, и снова случайно происходит сбой. Я добавил оповещения в Ajax Событие ошибки и в IE Я вижу ошибку «Недопустимый символ» и статус «ошибка разбора», но в chrome «NetworkError: Не удалось выполнить« send »для« XMLHttpRequest ». Тот же код работает нормально с 2 серверами, если я отключаю аутентификацию. Для ссылок на домашнюю страницу я удалил вызовы Ajax и использовал атрибуты уровня метода для авторизации, и я не вижу никаких ошибок. Это происходит только случайным образом, если я выполняю вызовы с Ajax Jquery.

Класс запуска

 public void Configuration(IAppBuilder app)
        {
            string authority = aadInstance + "/" + tenantId;
                    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            app.UseCookieAuthentication(new CookieAuthenticationOptions()
            {
                SlidingExpiration = true,
                CookieSecure = CookieSecureOption.Never,
                ExpireTimeSpan = TimeSpan.FromDays(15)
            });

            app.Map(
                "/web",
                a => app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
                {
                    ClientId = clientId,
                    Authority = authority,
                    PostLogoutRedirectUri = postLogoutRedirectUri,
                    RedirectUri = redirectUri,
                    SignInAsAuthenticationType = "Cookies",
                    UseTokenLifetime = false,
                    Notifications = new OpenIdConnectAuthenticationNotifications
                    {
                        SecurityTokenValidated = async n =>
                        {
                            n.AuthenticationTicket.Properties.IsPersistent = true;
                            n.AuthenticationTicket.Properties.ExpiresUtc = DateTime.Today.AddDays(1);
                        },
                        RedirectToIdentityProvider = (context) =>
                        {
                            context.ProtocolMessage.DomainHint = domainHint;
                            return Task.FromResult(0);
                        },
                        AuthenticationFailed = (context) =>
                        {
                            context.HandleResponse();
                            context.OwinContext.Response.Redirect("/Home/Error");
                            return Task.FromResult(0);
                        }
                    }
                }));

            app.Use((context, next) =>
            {
                OnAuth(context); (In this method, if user is authenticated, I add claim groups to cache)
                return next.Invoke();
            });
        }

Ajax вызов:

 authorize = function (functionName) {
            var url = "./HasAccess",
                isAuthorized = null;
            $.ajax({
                url: url,
                data: {
                    'function': functionName },
                type: 'GET',
                dataType: 'json',
                async: false,
                success: function (result) { do something}

У кого-нибудь были подобные проблемы?

...