我可以让浏览器强制使用智能卡进行身份验证,例如在apache conf中使用SSLVerifyClient保护php文件时使用ID卡。
现在我需要显示index.php而不需要智能卡身份验证,有时这个页面必须经过用户身份验证。
doStuff();
if ($needed==1)
authenticateUser();
doMoreStuff();
authenticateUser()包含什么,以便调用它会导致浏览器询问智能卡密码?
答案 0 :(得分:4)
你把东西混合了一点
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
关键点在于:您的Web服务器(在本例中为Apache)需要客户端证书才能授予对您指定SSLVerifyClient require
的任何目录/文件的访问权限。
总之,没有办法做你想做的事。您只能拥有需要或不需要客户端证书的文件/目录。为了要求提供客户端证书,无法在PHP文件中间停止,但您可以重定向到需要一个证书的文件。