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

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

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

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

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


person Margus Pala    schedule 30.11.2009    source источник


Ответы (1)


Вы немного смешиваете вещи.
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.

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

person Marius Burz    schedule 30.11.2009
comment
Ok. после того, как веб-сервер выполняет аутентификацию, в PHP можно проверить и/или прочитать какие-либо данные из сертификата/аутентификации клиента? - person Massimo; 03.05.2017