Приложение Dot net mvc, размещенное в Azure, внезапно перенаправляется на страницу входа снова и снова, пока не будет перезапущено

#.net #asp.net-mvc #azure #azure-active-directory #azure-webapps

Вопрос:

У меня есть 2 Dot net mvc5 заявки. Интерфейс и приложение API, размещенные в Azure качестве веб — приложений. Интерфейсное приложение имеет Azure AD настройку аутентификации в коде. Вот код ниже из startup.auth.cs файла

         var authority = string.Format("https://login.microsoftonline.com/{0}/v2.0", ConfigurationManager.AppSettings["TenantID"]);
        var idClient = ConfidentialClientApplicationBuilder.Create(appId)
            .WithRedirectUri(redirectUri)
            .WithClientSecret(appSecret)
            .WithAuthority(authority)
            .Build();

        var signedInUser = new ClaimsPrincipal(notification.AuthenticationTicket.Identity);
        var tokenStore = new SessionTokenStore(idClient.UserTokenCache, HttpContext.Current, signedInUser);

        try
        {
            string[] scopes = graphScopes.Split(' ');

            var result = await idClient.AcquireTokenByAuthorizationCode(
                scopes, notification.Code).ExecuteAsync();

            var userDetails = await GraphHelper.GetUserDetailsAsync(result.AccessToken);

            var cachedUser = new CachedUser()
            {
                DisplayName = userDetails.DisplayName,
                Email = string.IsNullOrEmpty(userDetails.Mail) ?
                userDetails.UserPrincipalName : userDetails.Mail,
                Avatar = string.Empty,
                AccessToken=result.AccessToken
            };
            MethodHelper methodHelper = new MethodHelper();
            Dictionary<string, dynamic> authOutput = new Dictionary<string, dynamic>();
            authOutput =await methodHelper.AuthorizeUserByEmailID(cachedUser.Email);
            if (authOutput["Success"])
            {
                AuthenticatedUser authenticatedUserDetails = authOutput["AuthenticatedUser"];
                if (authenticatedUserDetails != nullamp;amp; authenticatedUserDetails.HasToolAccess)
                {
                    AuthenticatedUser authenticatedUser = new AuthenticatedUser();
                    authenticatedUser = authOutput["AuthenticatedUser"];
                    cachedUser.UserID = authenticatedUser.UserId;
                    cachedUser.UserEmpId = authenticatedUser.UserEmpId;
                    cachedUser.DepartmentId = authenticatedUser.DepartmentId;
                    cachedUser.Department = authenticatedUser.Department;
                    tokenStore.SaveUserDetails(cachedUser);
                }
                else
                {
                
                    string message = "User Details return null";
                    notification.HandleResponse();
                    notification.Response.Redirect($"/Home/Error?message={message}amp;debug={message}");
                } else
            {
                string message = authOutput["Exception"];
                notification.HandleResponse();
                notification.Response.Redirect($"/Home/Error?message={message}amp;debug={message}");
            }
 

Здесь, как только приложение accesstoken успешно получено, оно вызывает метод входа в API для получения других сведений о пользователе

 authOutput =await methodHelper.AuthorizeUserByEmailID(cachedUser.Email);
 

выполняет эту задачу.
Это работает совершенно нормально, когда в систему входит меньше пользователей. Но вдруг днем. Приложение перестает работать, и все пользователи снова и снова перенаправляются на экран входа в систему. Until the Web App is restarted .

Ответ №1:

Пожалуйста, проверьте свой тег Forms в файле web.config, возможно, вы указали URL-адрес ~/входа.

Я добавил loginUrl как ~/Логин в свой конфигурационный файл и заметил ту же проблему , я изменил перенаправление на «~/Индекс» , для меня это сработало нормально.

Измените форму loginUrl в своей конфигурации на существующий маршрут индекса «~/Индекс», если у вас есть или создайте новое действие для обработки этого маршрута.

 <authentication mode="Forms">
     <forms loginUrl="~/Account/Index" name="AuthClientUser"
           timeout="60" slidingExpiration="true" cookieless="UseCookies" 
           path="/">
     </forms>
</authentication>
 

И добавьте следующее в раздел Настройки приложений в web.config

 <add key="autoFormsAuthentication" value="false" />
<add key="enableSimpleMembership" value="false"/>
 

Раздел авторизации web.config запрещает доступ всем анонимным пользователям.

Комментарии:

1. Спасибо за ваш ответ, Харшита, Вот мой код конфигурации файлов cookie app.UseCookieAuthentication(новые функции проверки подлинности cookies { CookieSecure = Функция проверки подлинности cookies. Всегда, CookieManager = новый SystemWebChunkingCookieManager(), Тип аутентификации = «Файлы cookie», Путь входа = новая строка пути(«/Учетная запись/Вход»), путь выхода = новая строка пути(«/Учетная запись/Выход»), ExpireTimeSpan = Промежуток времени. FromHours(2), SlidingExpiration = true, });

2. Я попробовал это решение, но, к сожалению, оно не сработало

3. Пожалуйста , проверьте раздел авторизации web.config, который запрещает всем анонимным пользователям.