在快速的问题是:有ANE办法改变HTTP授权标头与HTML / PHP / JavaScript的?
目标
我想提供用于用户登录以及提供整个网站保护的身份验证服务。我希望限制用户查看除登录页面以外的任何文件,除非获得授权。对于php,我当然可以在开始时检查例如会话令牌的可用性,并在缺少时进行重定向,但是对于jpg图像,我不能直接进行检查。我想到创建htaccess文件,该文件将验证用户是否已登录。
解决方案
1。
使用Apache我创建了.htaccess文件,该文件将进行验证(如果设置了HTTP授权)。如果不是,它将任何请求重定向到登录页面。使用该解决方案,除了登录页面外,无法打开任何文件(无论是php脚本还是例如jpg图像):
RewriteCond %{HTTP:Authorization} ^$
RewriteCond %{REQUEST_URI} !^/login.php
RewriteRule .* /login.php [L,R]
2。
登录页面应显示表单,并且当登录名和密码正确时,使用适当的令牌设置http request auth标头。
不幸的是,我找不到手动创建http请求身份验证标头的方法。我发现的唯一方法是使用基本身份验证:
$auth = new Auth();
if (!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SESSION)) {
$auth->logout();
}
if (!empty($_SERVER['PHP_AUTH_USER']) && empty($_SESSION)) {
$login = $_SERVER['PHP_AUTH_USER'];
$haslo = (!empty($_SERVER['PHP_AUTH_PW']) ? Auth::hashPassword($_SERVER['PHP_AUTH_PW']) : null);
$auth->login($login, $haslo);
}
$auth->getLoginForm();
其中getLoginForm()显示基本身份验证标准表单
public function getLoginForm()
{
header(self::HEADER_ERROR_ASK_CLIENT_DATA);
header(self::HEADER_RESPONSE_401);
exit;
}
此解决方案有效,但是http request auth标头始终保持原始登录数据,这是我想要避免的。我想在其中注入“ Bearer +令牌”字符串,这将有助于确保整个系统的安全。
我尝试过的
我可以使用外部前端轻松做到这一点。例如,使用Windows桌面应用程序,我可以发送一个带有基本auth标头的请求,然后发送一个带有承载头的请求。
我可以使用JQuery和AJAX进行相同的操作-我可以使用具有基本身份验证的url来检索令牌,然后将具有自定义标头的令牌用于下一个请求。
我还可以使用PHP CURL发出不同的请求。
但是我找不到一种方法来强制常规浏览器使用Basic auth标头登录,并在成功后为下一个请求保留新的自定义载体标头。
没有使用户代理(浏览器)Authorization: Bearer
自行提供标头的标准机制。
你可以做什么:
确保您的所有请求都通过XHR(Ajax)完成,然后将标头发送到那里。但这将不允许“常规”文件加载(新页面,图像,脚本,CSS ...)。
大多数人会做什么:发送带有您的身份验证令牌的cookie,然后检查该cookie。浏览器将自动发送cookie。
顺便说一句,请注意,您.htaccess
仅检查是否存在Authorization
标头,而不是标头的值,因此它毫无用处。您想通过脚本来引导所有读取,该脚本将在交付文件之前实际验证标头或cookie。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句