所以我试图在PHP中解析传入的请求,该请求具有以下标头集:
Authorization: Custom Username
简单的问题:我怎么能得到它的手?如果是Authorization: Basic
,我可以从$_SERVER["PHP_AUTH_USER"]
获取用户名。如果是X-Custom-Authorization: Username
,我可以从$_SERVER["HTTP_X_CUSTOM_AUTHORIZATION"]
获取用户名。但这些都不是由自定义授权设置的,var_dump($_SERVER)
显示没有提及标题(特别是AUTH_TYPE
缺失),而像get_headers()
这样的PHP5函数只能处理对传出的响应要求。我在Apache上使用开箱即用的Ubuntu安装运行PHP 5。
答案 0 :(得分:40)
如果您只打算使用Apache,可能需要查看apache_request_headers()
。
答案 1 :(得分:40)
对于基于令牌的身份验证:
$token = null;
$headers = apache_request_headers();
if(isset($headers['Authorization'])){
$matches = array();
preg_match('/Token token="(.*)"/', $headers['Authorization'], $matches);
if(isset($matches[1])){
$token = $matches[1];
}
}
答案 2 :(得分:17)
将此代码添加到.htaccess
RewriteEngine On
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
像Authorization: {auth_code}
一样传递标题,最后使用$_SERVER['HTTP_AUTHORIZATION']
答案 3 :(得分:8)
对于后台,为什么Apache会过滤掉Authorization
标题:https://stackoverflow.com/a/17490827
解决方案取决于使用哪个Apache模块将请求传递给应用程序:
mod_wsgi,mod_fcgid:
CGI:
其他黑客 - 在这个问题中按摩标题:
答案 4 :(得分:2)
Juste使用:
$headers = apache_request_headers();
$token = $headers['token'];