Intereting Posts
PHP 5.4 после установки: preg_match (): Ошибка компиляции: неизвестный бит (ы) опций, установленный со смещением 0 PHP разбивает массивы на группы на основе равных значений Laravel – изменить и вернуть переменную из @include Переадресация Symfony 2 с помощью POST CURL: отправка изображений с помощью границы в REST API Предупреждение: mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, строка задана Как получить разрешение экрана посетителя в javascript и / или php? Как разобрать заголовок, возвращенный cURL? Как синхронизировать электронные письма (в задаче) и отправлять обычные электронные письма в настоящий момент в других контроллерах? передавать несколько значений текстового поля в контроллер. изменить значение через 24 часа Пагинация в Laravel 4 работает на одной странице. но не работает для другого Расширение Microsoft sqlsrv для php 5.5.x Залог корзины Woocommerce Как преобразовать римскую цифру в целое число в PHP?

Как заставить приложение php требовать проверки подлинности смарт-карт

Я могу заставить браузер активировать аутентификацию с помощью смарт-карты, например, ID-карты, когда файл php защищен SSLVerifyClient в apache conf.

Теперь мне нужно отображать index.php, как правило, без проверки подлинности смарт-карт, и иногда эта же страница должна быть аутентифицирована пользователем.

doStuff(); if ($needed==1) authenticateUser(); doMoreStuff(); 

Что должно быть authenticateUser () содержать так, чтобы вызвать его заставляет браузер запрашивать PIN-код смарт-карты?

Вы смешиваете вещи немного.
authenticateUser(); выполняется на сервере, тогда как проверка подлинности происходит на клиенте. Вы не можете остановиться в середине запуска PHP-скрипта для проверки подлинности клиента, а затем продолжить запуск PHP-скрипта.

В качестве решения вашего вопроса это может работать в вашем случае:

 if(authenticationNeeded) { // redirect to a page that requires authentication that does what index was supposed to do. redirect('index_ssl.php'); } 

Используя .htaccess вы можете определить, что SSLVerifyClient require только для некоторых каталогов / файлов.
Ключевым моментом является то, что ваш веб-сервер (в данном случае Apache) требует сертификата клиента для предоставления доступа к любым каталогам / файлам, для которых SSLVerifyClient require указать SSLVerifyClient require .

В заключение, нет никакого способа делать то, что вы хотите. У вас могут быть только файлы / каталоги, которые требуют или не требуют сертификата клиента. Нет смысла останавливаться в середине файла PHP, чтобы требовать сертификат клиента, но вы можете перенаправить на тот, который требует его.