Приложение ASP.NET Framework v4, использующее переменные OpenIDConnect и Session [], не будет аутентифицировать второй сеанс - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть приложение .NET Famework 4.7.1 ASP.Net/MVC, которое я переключаю с SAML на нового провайдера идентификации OpenIDConnect.В исходном коде использовались библиотеки от провайдера SAML и использовалась Framework 4.5.Я обновил до 4.7.1 и добавил OWIN.

Казалось, все работало хорошо, пока я не запустил приложение в производство.В этот момент может войти только первый человек, который войдет в систему. Любой, кто запустит новый сеанс, просто попадет в цикл перенаправления между сайтом и IP-адресом, пока куки-файлы Nonce не заполнят запрос и не получат «Request Too».Длинная "ошибка.

У меня есть другие приложения, которые я настроил, используя этот IP и ASP.Net Framework, и у меня нет проблем.Это приложение - Framework 4.5, но с самого начала оно было разработано для использования OWIN и Kentor.AuthServices для SAML, и преобразование в OpenIDConnect было очень плавным.

Поддержка со стороны моего IP и я последовала заразговор между моим приложением и IP-адресом и токеном отправляется обратно правильно.Я добавил Уведомления в Аутентификацию и установил точки останова.Приложение получает токен и проверяет его.

Я попытался вернуться к Framework 4.5 и сделать все библиотеки той же версией, что и другое работающее приложение.Это не сработало.

Я наконец отследил это до использования переменных Session [].Я также смог воссоздать проблему с новым приложением .NET ASP.NET.

  1. Создать новую платформу "ASP.NET Web Application" 4.7.1 без аутентификации.(Вы можете начать с их аутентификации, но это не помогает)
  2. Установить пакет NuGet "Microsoft.Owin.Host.SystemWeb" (v4.0.0.0)
  3. Установить пакет NuGet "Microsoft.Owin.Security.OpenIdConnect "(v4.0.0.0)
  4. Установить пакет NuGet" Microsoft.Owin.Security.Cookies "(v4.0.0.0)
  5. Создать автозагрузку.cs

    с использованием Microsoft.Owin;используя Овина;используя Систему;использование Microsoft.Owin.Security.Cookies;используя System.Configuration;using System.Collections.Specialized;использование Microsoft.Owin.Security.OpenIdConnect;using Microsoft.IdentityModel.Protocols.OpenIdConnect;использование Microsoft.Owin.Security;[assembly: OwinStartupAttribute (typeof (WebApplication.Startup))] пространство имен WebApplication {открытый частичный класс Startup {public void Configuration (приложение IAppBuilder) {app.SetDefaultSignInAsAuthenticationType (CookieAuthenticationDefaults.AuthenticationType)} 10 * 10 * 10 * 10 * 28 **

  6. Изменить HomeController.cs

    открытый класс HomeController: Controller {public ActionResult Index () {return View ();}

       public ActionResult About()
       {
    
           ViewBag.Message = "Your application description page.";
    
           // Added this line ****************
           Session["Value"] = "Test Value";
    
           return View();
       }
    
       // Added this line ****
       [Authorize] 
       public ActionResult Contact()
       {
           ViewBag.Message = "Your contact page.";
    
           return View();
       }
    

    }

Чтобы выявить проблему, выполните следующие действия

  1. Запустите веб-приложение и перейдите кКонтактная страница.Вы уже пройдете проверку подлинности или вам нужно будет войти в систему.
  2. Откройте другой браузер или личную страницу / страницу инкогнито, чтобы получить новый сеанс и открыть сайт.Перейти на страницу контактов.Вам нужно будет войти снова.

Вы можете увидеть, как работает аутентификация для обоих сеансов.

Закройте второе окно браузера / частного / инкогнито. Вернитесь в первый браузер и перейдите на страницу About.Это страница с назначением Session [] Откройте новое окно браузера / частного / инкогнито.Вернитесь на страницу контактов на сайте.Вас снова попросят подтвердить подлинность.

После аутентификации браузер начнет цикл перенаправления между сайтом и вашим IP-аутентификацией.

Не имеет значения, находится ли атрибут [Authorize] на контроллере илиДействие.Неважно, есть ли секретный ключ клиента, назначенный в опциях OpenIdConnect.Я добавил переменную Session [] в другое работающее приложение, и у него возникла та же проблема.

Кроме удаления всех переменных Session [], можно ли что-то сделать, чтобы остановить это поведение?

Я знаю, что это длинный пост.Спасибо за чтение до конца и спасибо за любую помощь.

1 Ответ

0 голосов
/ 12 декабря 2018

Сотрудник обнаружил эту запись.

ASP.NET_SessionId + OWIN Файлы cookie не отправляются в браузер

Есть несколько ответов об альтернативных менеджерах файлов cookie.Сообщение от Андерса Абеля работает в моем тестовом приложении.Я собираюсь изучить еще несколько ответов там.

...