Я могу заставить браузер активировать аутентификацию с помощью смарт-карты, например, 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, чтобы требовать сертификат клиента, но вы можете перенаправить на тот, который требует его.