我正在将授权:Bearer {Token}作为HTTP请求传递给我的Symfony Rest Controller。
我的要求:
GET /app_dev.php/api/members HTTP/1.1
Host: localhost
Authorization: Bearer 123456789
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
在我的控制器内:
$this->getRequest()->headers;
由于某种原因,当我使用Symfony的Request方法时,我的控制器无法使用Authorization标头。当我使用PHP的getallheaders()时,Authorization标头会按预期显示。关于为什么Symfony没有看到它的任何想法?
由于
答案 0 :(得分:15)
很可能被Apache剥夺了。 Bearer
不是一个已知的方案,它有点专有。
因此,要么使用自定义标题,例如X-Bearer-Token: 123456789
,要么可以尝试在.htaccess
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
答案 1 :(得分:3)
Symfony正在使用php全局变量$_SERVER
来创建Request->headers
变量,但$_SERVER
不包含所有标头。要获取所有标头,您必须使用php native function getallheaders()
更多信息:http://php.net/manual/en/function.getallheaders.php
答案 2 :(得分:2)
问题与接受的答案之间似乎存在脱节。如果授权标头可供PHP的getallheaders()使用,那么Apache显然不会剥离它。我猜这个问题与Symfony的使用有关。 $ this-> getRequest() - >标题不返回包含标题的对象,它返回HeaderBag。假设getallheaders()可以看到标题,这可以:
$this->getRequest()->headers->all();
或更具体地说:
$this->getRequest()->headers->get('Authorization');
答案 3 :(得分:1)
似乎是apache mod_php“吃掉”授权标题。
这对我有用:
@Service
public class EmployeeServiceImpl implements EmployeeService{
}
答案 4 :(得分:0)
您也可以使用apache_request_headers();获取具有Authorization标头的原始标头。