Symfony 2.3 getRequest() - >标头未显示授权承载令牌

时间:2013-10-18 07:12:30

标签: symfony authorization token

我正在将授权: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没有看到它的任何想法?

由于

5 个答案:

答案 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标头的原始标头。