FOSOAuthServerBundle,授权 header 不起作用,但查询中的 access_token 有效

FOSOAuthServerBundle, Authorization header doesn't work but access_token in query works

我正在使用 authorization_code 授权类型。我已经创建了一个客户端 auth_code,然后创建了访问和刷新令牌,一切都成功了。 现在我尝试使用 access_token ,问题来了。如果我把它作为一个 request/query 参数 access_token=123456789,它工作得很好,我得到了请求的资源。

但我读到,出于安全原因,将其嵌入授权 header 实际上更好。我正在尝试这个但不起作用:

Authorization: Bearer 123456789

也尝试过:

Authorization: 123456789

但没有任何效果。我得到的是:

{
    "error": "access_denied",
    "error_description": "OAuth2 authentication required"
}

有什么想法吗?如果我在服务器和客户端都使用 SSL,我可以安全地使用参数而不是 headers 吗?

嗯,我自己找到了解决办法。这其实也算是一道"duplicated"题,只是我到现在才知道。试图追踪错误,我发现授权 header 在 Symfony 分析器中完全缺失(幸运的是,Symfony 在响应中发送与每个请求相关的分析器 URL)。所以我搜索了 "symfony missing authorization header"(或类似的东西,不记得了)并找到了这个:

Request headers bag is missing Authorization header in Symfony 2?

mezod 的回答对我来说是最有效的。我只是把它放在 Apache 的虚拟主机配置文件中,然后重新加载 Apache 服务。现在可以了。无需将其作为 'access_token' 请求参数。授权header为胜利。顺便说一句,现在唯一有用的是: Authorization: Bearer 123456789

是的,Bearer 中的大写 B。所有其他组合(non-capital,OAuth 而不是 Bearer,只有令牌本身)都惨遭失败。

以防有人无法访问 link,将其放入您的虚拟主机配置文件中(我自己还没有在 .htaccess 中尝试过):

RewriteEngine On
RewriteCond %{HTTP:Authorization} .+
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

就是这样。我真的真的希望它对某人的帮助至少是它为我所做的一半。