Мне нужно захватить сертификаты пользователя X.509 с их карточек и сопоставить их с таблицей пользователей для проверки подлинности на основе форм в ASP.NET MVC. Я создал проект MVC (версия 2) в VS 2008, настроенный для запуска в качестве виртуального каталога на веб-сайте по умолчанию в локальном IIS в Vista с использованием шаблона по умолчанию, но добавил атрибут RequireHttpsAttribute в Account / LogOn ActionResult. Других изменений нет. Используя локальный диспетчер IIS, я создал самозаверяющий сертификат и применил его, а затем установил для страницы Account / Logon.aspx значение Требовать SSL и Требовать клиентские сертификаты.
При запуске в режиме отладки, когда я нажимаю ссылку «Вход в систему» со страницы приветствия (представление «Главная страница / индекс»), он правильно перенаправляется на Account / Logon.aspx с использованием https, но не запрашивает сертификат. Используя Dynatrace (потрясающе, http://ajax.dynatrace.com),), я вижу, что статус ответа устанавливается на 403, но опять же, без подтверждения.
В качестве проверки работоспособности я настроил проект веб-приложения asp.net по умолчанию для запуска в виртуальном каталоге на веб-сайте по умолчанию (аналогично проекту MVC выше) в Vista и настроил для страницы default.aspx требование SSL и Требовать клиентские сертификаты, как это сделано в проекте MVC выше. Запустил его, работает нормально, я получаю приглашение сертификата и могу выбрать сертификат и ввести PIN-код для карты и прочитать мой X.509 из объекта request.clientcertificate в коде позади.
Для пула приложений для обоих виртуальных каталогов установлено значение Classic .NET AppPool в режиме интегрированного конвейера.
Помощь?!
Обновление:
Супер клудый обходной путь в процессе. Я добавил в нее папку «Auth» и файл «GetCert.aspx», помеченный как «SSL / Требовать клиентские сертификаты» для проекта MVC, а затем добавил «маршруты. .asax. Код позади ответа GetCert.aspx записывает данные, которые я хочу получить из X.509. Затем я добавил вызов jquery.get в LogOn.aspx, который вызывает GetCert.aspx и возвращает результаты проверки субъекта в виде строки в div в LogOn.aspx. Теперь я получаю запрос сертификата и получаю результаты в моем представлении MVC, но это не может быть способом сделать это!