2

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

但我读过,出于安全原因,将它嵌入到 Authorization 标头中实际上更好。我正在尝试这个并且不起作用:

Authorization: Bearer 123456789

也试过:

Authorization: 123456789

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

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

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

4

1 回答 1

2

好吧,我自己找到了解决方案。这实际上可以被认为是一个“重复”的问题,但直到现在我才知道。尝试跟踪错误时,我发现 Symfony 分析器中完全缺少 Authorization 标头(幸运的是,Symfony 在响应中发送了与每个请求相关的分析器 URL)。所以我搜索了“symfony 缺少授权标头”(或类似的东西,不记得了),发现了这个:

Symfony 2 中的请求标头包缺少授权标头?

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

是的,在 Bearer 中使用大写 B。所有其他组合(非资本,OAuth 而不是 Bearer,只有令牌本身)都惨遭失败。

如果有人无法访问该链接,问题是将其放入您的虚拟主机配置文件中(我自己还没有尝试过 .htaccess ):

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

就是这样了。我真的真的希望它至少能帮助我做的事情的一半。

于 2016-07-19T17:48:05.143 回答